Cod sursa(job #2195103)

Utilizator Marina23Oprea Marina Marina23 Data 15 aprilie 2018 12:05:03
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.69 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;
    n = strlen(pat);
    int j = 0, i = 1;
    lps[0] = 0;
    while(i <n) {
      if(pat[j] == pat[i]) {
        j++;
        lps[i] = j;
        i++;
      } else {
        if(j)
          j = lps[j-1];
        else {
          lps[i] = 0;
          i++;
        }
      }
    }
    i = n-1;
    while(i >= 0 && ((i+1) % (i+1 - lps[i]) || lps[i] == 0))
      i--;
    cout << i+1 << "\n";
  }
  return 0;
}