Cod sursa(job #3195859)

Utilizator abelesefBurduhos Abel abelesef Data 21 ianuarie 2024 21:25:28
Problema Prefix Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <iostream>
#include <fstream>
#include <cstring>
#include <vector>
using namespace std;
ifstream fin("prefix.in");
ofstream fout("prefix.out");
string a;
int table[1000005];
int n;
int i,k,t,r;
int main() {
        fin>>t;
        for (int it = 1;it<=t;++it) {
                fin>>a;
                n = a.length();
                table[0] = 0;
                k = 0;
                i = 1;
                r = 0;
                while(i<n) {
                        if (a[i] == a[k]) {
                                k++;
                                table[i] = k;
                                i++;
                        } else if (k!=0) {
                                k = table[k-1];
                        } else {
                                table[i] = 0;
                                i++;
                        }
                }
                for (int i = 1;i<n;++i) {
                        int f1 = i+1,f2 = i+1-table[i];
                        if (f1 % f2 == 0 && f1/f2>1) r = f1;
                }
//                for (int i = 0;i<n;++i) {
//                        cout<<table[i]<<" ";
//                }
//                cout<<'\n';
                fout<<r<<'\n';
        }
        return 0;
}