Cod sursa(job #1675463)

Utilizator lflorin29Florin Laiu lflorin29 Data 5 aprilie 2016 12:32:51
Problema Prefix Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.73 kb
#include <bits/stdc++.h>

using namespace std;

const int MAXN = 1e6 + 7;

char s[MAXN];
int pi[MAXN];

void answer()
{
   int n = strlen(s+1);
   int ans = 0;
   pi[1] = 0;
   for(int i = 2, q = 0; i <= n; ++i)
   {
      while(q && s[q + 1] != s[i])
         q = pi[q];
      if(s[q + 1] == s[i]) ++ q;
      pi[i] = q;
   }

   for(int i = n - 1 ; i > 1 ; --i)
   {
      if(pi[i] && i % (i - pi[i]) == 0)
      {
         printf("%d\n", i);
         return;
      }
   }
   printf("%d\n", 0);
}

int main()
{
   freopen("prefix.in", "r", stdin);
   freopen("prefix.out", "w", stdout);
   int t;
   scanf("%d\n", &t);
   while(t--)
   {
      scanf("%s\n", s + 1);
      answer();
   }
   return 0;
}