Cod sursa(job #20983)

Utilizator pocaituDavid si Goliat pocaitu Data 22 februarie 2007 18:46:57
Problema Cutii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.34 kb
#include<fstream.h>
#include<string.h>
int prec[260][600],solutie;
int nr[260],i,j,n,k,d,k1,sol[600],c[260][600],cc[260][600],coada[260][600],lung;
char cuv[260][30][260],s[300],ss[260][260],r[260];
int main()
{ifstream f("prop.in");
 f>>n>>k;
 f.getline(s,300);
 for(i=1;i<=n;i++)
  {f.getline(s,300);
   nr[i]=0;
   for(j=0;j<=strlen(s);j++)
	if(s[j]>='a'&&s[j]<='z')
	   {k1=j;
		//nr[i]++;
		while(s[k1]>='a'&&s[k1]<='z')
		  r[k1++-j]=s[k1];
		r[k1-j]=NULL;
		for(d=1;d<=nr[i];d++)
		 if(strlen(r)==strlen(cuv[i][d]))
		   break;
		if(d==nr[i]+1)
		  strcpy(cuv[i][++nr[i]],r);
		j=k1-1;
		}
	}
 coada[1][++coada[1][0]]=0;
 for(i=1;i<=n;i++)
  {memset(sol,0,sizeof(sol));
  for(j=1;j<=nr[i];j++)
   for(d=1;d<=coada[i][0];d++)
    {lung=strlen(cuv[i][j]);
	 if(coada[i][d]+lung<=k-n+1&&(!sol[coada[i][d]+lung]))
	   {sol[coada[i][d]+lung]=1;
		coada[i+1][++coada[i+1][0]]=coada[i][d]+lung;
		prec[i+1][coada[i+1][0]]=d;
		c[i+1][coada[i+1][0]]=i;
		cc[i+1][coada[i+1][0]]=j;
		}
	 }

  }
 ofstream g("prop.out");
 for(i=1;i<=coada[n+1][0];i++)
  if(coada[n+1][i]==k-n+1)
	solutie=i;
 if(!solutie)
  {g<<0;
   g.close();
   return 0;
   }
 j=solutie;
 for(i=n+1;i>=2;i--)
 {strcpy(ss[i-1],cuv[c[i][j]][cc[i][j]]);
  j=prec[i][j];
  }
 for(i=1;i<=n;i++)
  g<<ss[i]<<" ";
 g.close();
 return 0;
 }