Cod sursa(job #1184650)

Utilizator stef93Stefan Gilca stef93 Data 13 mai 2014 18:50:14
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <iostream>
#include <fstream>
#include <cstring>

using namespace std;

char sir[1000003];
int urm[1000003];
int len;

void genereazaUrmatorul()
{
	int k = 0, i;
	urm[1] = 0;
	for (i = 2; i <= len; i++)
	{
		while (k > 0 && sir[k + 1] != sir[i])
		{
			k = urm[k];
		}

		if (sir[k + 1] == sir[i])
		{
			k++;
		}
		urm[i] = k;
	}
}
int main()
{
	ifstream in("prefix.in");
	ofstream out("prefix.out");

	int T , i , q , z;

	in >> T;
	sir[0] = 'a';

	while (T--)
	{
		in >> (sir + 1);
		len = strlen(sir) - 1;

		genereazaUrmatorul();

		i = 1;
		q = 0;
	
		for (i = len; i >= 1; i--)
		{
			if (urm[i] != 0 && i % (i - urm[i]) == 0)
			{
				goto end;
			}
		}

		end:
		out << i << '\n';
	}

	in.close();
	out.close();

	return 0;
}