Cod sursa(job #2462349)

Utilizator OctavianVasileVasileOctavian OctavianVasile Data 27 septembrie 2019 10:05:17
Problema Prefix Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.76 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("prefix.in");
ofstream fout ("prefix.out");
#define NMAX 1000003
int lps [NMAX], ind, t, ans;
string str;
void KMP (string A){
    ind = 0;
    memset (lps, 0, sizeof (lps));
    for (int i = 1; i < A.size ();){
		if (A [ind] == A [i]){
			lps [i ++] = ++ ind;
		}
		else if (ind != 0)
			ind = lps [ind - 1];
		else lps [i ++] = 0;
	}
}
int main (){
	fin >> t;
	while (t --){
		fin >> str;
		KMP (str); ans = 0;
		for (int i = str.size () - 1; i >= 0; i --){
			if (lps [i] != 0 && (i + 1) % (i - lps [i]) == 0){
				ans = i + 1;
				break;
			}
			if (i % 2 == 1 && lps [i] == (i + 1) / 2){
                ans = i + 1;
				break;
			}
		}
		fout << ans << '\n';
	}
	return 0;
}