Pagini recente » Cod sursa (job #24662) | Cod sursa (job #403253) | Cod sursa (job #2967505) | Cod sursa (job #291000) | Cod sursa (job #1375026)
#include <fstream>
#include <iostream>
#include <algorithm>
#include <vector>
#include <cstring>
#define NMAX 20005
#define get_max(a,b) ((a)>(b)?(a):(b))
#define get_min(a,b) ((a)<(b)?(a):(b))
using namespace std;
ifstream in ( "text3.in" );
ofstream out ( "text3.out" );
int nWords , dWords;
int succ[NMAX] , c[NMAX] , DP[26] , length[NMAX] , ind;
char words[NMAX][25] , cuv[205];
void MakeDP ( void ){
int i , j ;
for ( i = nWords; i >= 1 ; --i ){
int lastletter = words[i][length[i]-1] - 'a' ;
int firstletter = words[i][0] -'a';
succ[i] = c[lastletter];
if ( DP[lastletter] +1 > DP[firstletter] )
DP[firstletter] = DP[lastletter] + 1 ,
c[firstletter] = i;
if ( dWords < DP[firstletter] )
dWords = DP[firstletter] ,
ind = firstletter ;
}
}
void Put ( int j ){
int i ;
for ( int i = 0 ; i < length[j] ; ++i )
out << words[j][i];
out << "\n";
}
int main ( void ){
int i , j ;
while ( in >> cuv ){
++nWords;
int len = strlen ( cuv );
length[nWords] = len ;
for ( i = 0 ; i < len ; ++i )
words[nWords][i] = cuv[i];
}
MakeDP();
out << nWords << "\n" << nWords - dWords << "\n";
ind = c[ind];
while ( ind ){
Put( ind );
ind = succ[ind];
}
in.close();
out.close();
return 0 ;
}