Cod sursa(job #2272504)

Utilizator stefan_creastaStefan Creasta stefan_creasta Data 30 octombrie 2018 11:06:42
Problema Flux maxim Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.93 kb
#include <cstdio>
#include <cstring>
#include <cassert>
using namespace std;
const int NMAX = 20005;
char s[NMAX][30];
char a[NMAX][30];
int lastp[NMAX];
int lastc[NMAX];
char ss[NMAX];
int dp[30];

int main() {
  int n = 1;
  freopen("text3.in", "r", stdin);
  freopen("text3.out", "w", stdout);
  scanf("%s", s[1]);
  while(s[n][0] != 0) {
    scanf("%s", s[++n]);
  }
  n--;
  printf("%d\n", n);
  int maxim = 0, poz = 0;
  for(int i = 1; i <= n; i++) {
    int l = (int)strlen(s[i]);
    int c1 = s[i][0] - 'a';
    int c2 = s[i][l - 1] - 'a';
    if(dp[c1] + 1 > dp[c2]) {
      dp[c2] = dp[c1] + 1;
      lastp[i] = lastc[c1];
      lastc[c2] = i;
      if(maxim < dp[c2]) {
        maxim = dp[c2];
        poz = i;
      }
    }
  }
  int m = 0;
  while(poz) {
    strcpy(a[++m], s[poz]);
    poz = lastp[poz];
  }
  assert(maxim <= n);
  printf("%d\n", n - maxim);
  for(int i = m; i > 0; i--) {
    printf("%s\n", a[i]);
  }
  return 0;
}