Cod sursa(job #2496239)

Utilizator Lazar_LaurentiuLazar Laurentiu Lazar_Laurentiu Data 20 noiembrie 2019 15:51:47
Problema Prefix Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.72 kb
#include <iostream>
#include <fstream>
#define MAX 1000010

using namespace std;

int n,ans;
int pi[MAX];
string s;

void calc_pi(string pat,int pi[MAX]){
  pi[0]=0;
  int la=0;
  for(int i=1;i<pat.size();)
    if(pat[i]==pat[la])pi[i++]=++la;
    else
      if(la!=0)la=pi[la-1];
      else pi[i++]=0;
}

int main()
{
    ifstream f ("prefix.in");
    ofstream g ("prefix.out");
    f>>n;
    while(n--){
      f>>s;
      calc_pi(s,pi);
//      for(int i=0;i<s.size();i++)cout<<pi[i]<<" "; cout<<'\n';
      ans=0;
      for(int i=0;i<s.size();i++)
        if(pi[i]!=0&&pi[i]>=(i+1)/2&&(i+1)%(i+1-pi[i])==0)
          ans=i+1;
      g<<ans<<'\n';
    }
    f.close ();
    g.close ();
    return 0;
}