Pagini recente » Cod sursa (job #247379) | Cod sursa (job #1119473) | Cod sursa (job #584917) | Cod sursa (job #2920242) | Cod sursa (job #17296)
Cod sursa(job #17296)
#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;
}