Cod sursa(job #20947)

Utilizator wazupPricop Mircea wazup Data 22 februarie 2007 17:42:05
Problema A+B Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <stdio.h>
#include <fstream.h>
struct cuv { unsigned char lit[255],nrc; }; // 255
cuv a[250][130];  //250 130
int b[250][500];  // 250 500
int n,k,i,j,l,m,s;
char c;
FILE *fin;
ofstream fout("prop.out");

void dorite(int li,int lj)
{
if (li>0)
{
dorite(li-1,lj-a[li-1][b[li][lj]-1].nrc);
if (li==n)
 {  fout<<a[li-1][b[li][lj]-1].lit<<"\n";
    return;
    }
fout<<a[li-1][b[li][lj]-1].lit<<" ";
}
return;
}

int main()
{
fin = fopen("prop.in", "rt");

// CITIREA
fscanf(fin,"%d",&n);
fscanf(fin,"%d",&k);
fgetc(fin);

for (i=0;i<n;i++)
  { c='a';
    l=-1;
    while (c!='\n'&&!feof(fin))
      {  c='a';
	 l++;
	 m=0;
	 while (1)
	   {
	     c=fgetc(fin);
	     if (c==' '||c=='\n'||feof(fin)) break;
	     a[i][l].lit[m++]=c;
	     a[i][l].nrc++;
	   }
	if (i!=n-1)
	  a[i][l].nrc++;

      }
 }

for (i=1;i<=n;i++)
  for (s=1;s<=k;s++)
     { j=0;
       while (a[i-1][j].nrc!=0)
	 { if (s-a[i-1][j].nrc>=0&&(b[i-1][s-a[i-1][j].nrc]>0||(i==1&&s==a[i-1][j].nrc)))
	     { b[i][s]=j+1;
	       break;
	     }
	   j++;
	 }
     }
if (b[n][k]==0)
  fout<<0<<'\n';
else
  {
    dorite(n,k);
  }
return 0;
}