Cod sursa(job #3293120)

Utilizator laurentiu.maticaMatica Laurentiu-Andrei laurentiu.matica Data 10 aprilie 2025 13:17:15
Problema Prefix Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <fstream>
#include <string>
#include <queue>
using namespace std;
ifstream cin("prefix.in");
ofstream cout("prefix.out");
int lps[2000001];
queue<int> q;
void LPS(string pattern)
{
    int i=1;
    int j=0;
    int n=pattern.length();
    while(i<n)
    {
        if(pattern[i]==pattern[j])
        {
            j++;
            lps[i]=j;
            i++;
        }
        else {
            if(!j) {
                lps[i]=0;
                i++;
            }
            else {
                j=lps[j-1];
            }
        }
    }
}
int main() {
    int n;
    cin>>n;
    cin.get();
    for(int j=0;j<n;j++) {
        string x;
        getline(cin,x);
        LPS(x);
        int lmax=-1,poz = 0;
        for(int i=0;i<x.length();i++)
            if(lps[i]>lmax) {
                lmax=lps[i];
                poz=i;
            }
        if(lmax==0)
            cout << 0 << '\n';
        else {
            int pref=poz-lmax+1;
            cout << pref*(lmax/pref+1) << endl;
            for(int i=0;i<x.length();i++)
                lps[i]=0;
        }
    }
    return 0;
}