Cod sursa(job #2193712)

Utilizator lucametehauDart Monkey lucametehau Data 11 aprilie 2018 09:36:54
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.7 kb
#include <fstream>
#include <cstring>

using namespace std;

ifstream cin ("prefix.in");
ofstream cout ("prefix.out");

const int nmax = 1000000;

int t, n;

char pat[1 + nmax];
int lps[1 + nmax];

int main() {
  cin >> t;
  for(; t; t--) {
    cin >> (pat + 1);
    n = strlen(pat + 1);
    int i = 0, j = 2;
    lps[1] = 0;
    while(j <= n) {
      if(pat[i + 1] == pat[j]) {
        i++;
        lps[j] = i;
        j++;
      } else {
        if(i)
          i = lps[i];
        else {
          lps[j] = 0;
          j++;
        }
      }
    }
    i = n;
    while(i >= 1 && (i % (i - lps[i]) || lps[i] == 0))
      i--;
    cout << i << "\n";
  }
  return 0;
}