Cod sursa(job #2724315)

Utilizator handicapatucavasi eduard handicapatu Data 16 martie 2021 22:12:37
Problema Prefix Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

ifstream f("prefix.in");
ofstream g("prefix.out");

string text;
int T;
int lps[1000001];
int n;
bool isperiod(int x){
    if((lps[x-1] >= x/2) && (x%(x-lps[x-1])== 0)){
        return 1;
    }
    return 0;
}
void compute_lps_array(){
    int len = 0;
    lps[len] = 0;
    int i = 1;
    int ans = 0;
    while(i < n){
        if(text[i] == text[len]){
            ++len;
            lps[i] = len;
            if(isperiod(i+1)){
                ans = i+1;
            }
            ++i;
        }
        else{
            if(len != 0){
                len = lps[len-1];
            }
            else{
                lps[i] = 0;
                ++i;
            }
        }
    }
    g<<ans;
}
int main()
{
    f>>T;
    for(int t=1;t<=T;++t){
        f>>text;
        n = text.length();
        compute_lps_array();
        g<<"\n";
    }
    return 0;
}