Cod sursa(job #2461620)

Utilizator HumikoPostu Alexandru Humiko Data 25 septembrie 2019 21:41:25
Problema Prefix Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <algorithm>
#include <stack>
#include <queue>
#include <deque>
#include <vector>
#include <string>
#include <set>
#include <map>
#include <cstring>

using namespace std;

//#include <iostream>
#include <fstream>

//ifstream cin ("input.in");
//ofstream cout ("output.out");

ifstream cin ("prefix.in");
ofstream cout ("prefix.out");

static const int NMAX = 1e6+5;

int pi[NMAX];
char s[NMAX];

void checkOccurence(int n) {
	for ( int i = n; i >= 2; --i ) {
		if ( pi[i] && !(i%(i-pi[i])) ) {
			cout<<i<<'\n';
			return;
		}
	}
	cout<<0<<'\n';
}

void kmp( int n ) {
	for ( int i = 2; i <= n; ++i ) {
		pi[i] = pi[i-1];

		while ( pi[i] && s[pi[i]+1] != s[i] ) {
			pi[i] = pi[pi[i]];
		}

		if ( s[pi[i]+1] == s[i] ) {
			pi[i]++;
		}
	}

	checkOccurence(n);
}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(0); cout.tie(0);

	int t;
	cin>>t;
	while ( t-- ) {
		cin>>(s+1);
		int n = strlen(s+1);
		kmp(n);
	}
}