Cod sursa(job #2457978)

Utilizator mircearoataMircea Roata Palade mircearoata Data 19 septembrie 2019 11:06:49
Problema Prefix Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.65 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int t, ans;
char s[1000005];
int phi[1000005];

int main()
{
	in >> t;
	while(t--)
	{
		in >> (s + 1);
		int n = strlen(s + 1);
		phi[0] = phi[1] = 0;
		for (int i = 2; i <= n; i++)
		{
			int x = i - 1;
			while (s[phi[x] + 1] != s[i] && phi[x])
				x = phi[x];
			if (s[phi[x] + 1] == s[i])
				phi[i] = phi[x] + 1;
			else
				phi[i] = 0;
		}

		ans = 0;
		for (int i = n; i >= 1; i--)
			if (phi[i] >= (i + 1) / 2 && s[i] == s[i - phi[i]])
			{
				ans = i;
				break;
			}

		out << ans << '\n';
	}
}