Cod sursa(job #20824)

Utilizator MARCELMIHALCEA MARICEL MARCEL Data 22 februarie 2007 12:52:07
Problema Jocul Flip Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.44 kb

#include<stdio.h>

#define Nmax 251
#define Cmax 501
#define Cuvmax 130

char s[Nmax][Cmax];

int P[Nmax][Cuvmax];

int c[Nmax][Cmax];

int prec[Nmax][Cmax];

int n,k;


void rmksol(int i,int j)
 {

 int ii,jj,l;

 if( prec[i][j] ) rmksol( i-1 ,  prec[i][j] ) ;


   for( jj=0,l=0 ; s[i][jj] ; jj ++ )
   if( 'a'<=s[i][jj] && s[i][jj]<='z' ) l++;
    else
	 {
      if( l == j-prec[i][j] )
	  {
	  for( ii = jj - l ; ii < jj ; ii ++ )
	   printf("%c",s[i][ii]);
	   l=0;
	   break;
	   }
	l=0;
	 }
      if( l == j-prec[i][j] )
	  for( ii = jj - l ; ii < jj ; ii ++ )
	   printf("%c",s[i][ii]);

	printf(" ");

 }

int main()
{
int i,j,l;


freopen("prop.in","r",stdin);
freopen("prop.out","w",stdout);


scanf("%d%d",&n,&k);
getc(stdin);

k=k-n+1;

for ( i = 0 ; i < n ;  gets(s[i++]) ) ;


 for(i=0;i<n;i++)
  {

  for( j=0,l=0 ; s[i][j] ; j ++ )
   if( 'a'<=s[i][j] && s[i][j]<='z' ) l++;
    else
      if( l ) P[i][ ++P[i][0] ] = l,  l=0;
      if( l ) P[i][ ++P[i][0] ] = l,  l=0;

  }



  for(j=1;j<=P[0][0];j++)
   c[0][ P[0][j] ] =1;



  for( i=1 ; i < n; i ++ )
   for( j=i; j <= k ; j ++ )
    for( l = 1; l <= P[i][0] ; l ++)
     if( j-P[i][l]>0 && c[i-1][j-P[i][l]] )
	  {
	  c[i][j]=1;

	  prec[i][j]=j-P[i][l];

	  l=P[i][0]+1;
	  }


    if( c[n-1][k] == 0 ) { printf("0\n"); return 0; }



   rmksol(n-1,k);


   printf("\n");


  return 0;
    }