Cod sursa(job #1375026)

Utilizator superman_01Avramescu Cristian superman_01 Data 5 martie 2015 11:47:14
Problema Arbori indexati binar Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.34 kb
    #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 ;
}