Cod sursa(job #388569)

Utilizator taseTanase Alexandru tase Data 30 ianuarie 2010 14:07:03
Problema Text Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.7 kb
#include <stdio.h>
#include <string.h>


	int max,nc;
	char x[1001],m[30][501];


 void cuvinte ()
	     {
		char *p;
		p=strtok (x," ");
		while (p)
		     {
			strcpy (m[++nc],p);
			p=strtok (NULL," ");
		     }
	     }

 void print (int sp[], int uc, int uc1)
	   {
	      int i,j;
	      for (i=uc1;i<=uc;i++)
		 {
		    printf ("%s",m[i]);
		    for (j=1;j<=sp[i];j++)
			 printf (" ");
		 }
	      printf ("\n");
	   }

 void aliniere ()
	      {
		 int i,uc=0,ncf=0,sp[501],uc1;
		 if (strlen (x) - 1 <= max)
		     printf ("%s\n",x);
		   else
		       {
			  cuvinte ();
			  while (uc < nc)
			  {
			  ncf=0;
			  uc1=uc+1;
			  for (i=uc1;i<=nc+1 && ncf + (i-1-uc1) <= max;i++)
			     {
				ncf=ncf+strlen (m[i]);
			     }
			  i--;
			  ncf=ncf-strlen (m[i]);
			  uc=i-1;
			  for (i=uc1;i<=uc;i++)
			     sp[i]=0;
			  if (uc == nc)
			      {
				 for (i=1;i<=nc;i++)
				      sp[i]=1;
	      		 print (sp,uc,uc1);
			      }
			       else
				    {
			  while (ncf < max)
			       {
				   if (ncf + uc - 1 <= max)
				     {
					for (i=uc1;i<uc;i++)
					   {
					     sp[i]++;
					     ncf++;
					   }
				     }
				    else
					 {
					    i=uc1;
					    while (ncf < max)
						 {
						    sp[i++]++;
						    ncf++;
						 }
					 }
			       }
			  print (sp,uc,uc1);
				    }
			  }
		       }
	      }

 void scan ()
	  {
	      scanf ("%d\n",&max);
	      while (gets (x) != 0)
		   {
                      nc=0;
		      aliniere ();
		   }
	  }


 int main ()
	 {
	    freopen ("4-text.in","r",stdin);
	    freopen ("text.out","w",stdout);
	    scan ();
	    fcloseall ();
	    return 0;
	 }