Cod sursa(job #2354367)

Utilizator BogdanRazvanBogdan Razvan BogdanRazvan Data 25 februarie 2019 11:34:15
Problema Prefix Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin ("prefix.in");
ofstream fout ("prefix.out");
char s1[2000005], s2[2000005];
int pref[2000005], sz1, sz2, ans[1005], k;
void prefix()
{
    int k = 0;
    pref[1] = 0;
    for(int i = 2; i <= sz1; i++) {
        while(k > 0 && s1[k + 1] != s1[i]) k = pref[k];
        if(s1[k + 1] == s1[i]) ++k;
        pref[i] = k;
    }
}
int main()
{
    int t;
    fin >> t;
    fin.getline(s1 + 1, 2000003);
    for(int j = 1; j <= t; j++) {
            fin.getline(s1 + 1, 2000003);
            sz1 = strlen(s1 + 1);
            prefix();
            int mx = 0;
            for(int i = 1; i <= sz1; i++) {
                if(i % (i - pref[i]) == 0 && pref[i]) mx = i;
                pref[i] = 0;
            }
            fout << mx << "\n";
    }
    return 0;
}