Cod sursa(job #2440427)

Utilizator claudiu.gatinaFMI Claudiu Gatina claudiu.gatina Data 18 iulie 2019 13:33:57
Problema Prefix Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <vector>
#include <algorithm>
#include <set>

#define NMAX 1000002

using namespace std;

char ss[NMAX];

void solve()
{
	scanf("%s", &ss);
	char* s = ss - 1;
	*s = 'f';

	set<int> distances;

	char c = s[1];
	int maxLen = 0;
	int size = strlen(s);
	for (int i = 2; i < size; ++i)
	{
		if (s[i] == c)
		{
			distances.insert(i - 1);
		}
		vector<int> toErase;
		for (auto d : distances)
		{
			if (s[i - d] == s[i])
			{
				if (i % d == 0 && i / d >= 2)
					maxLen = i;
			}
			else
				toErase.push_back(d);
		}

		for (auto x : toErase)
			distances.erase(x);
	}

	printf("%d\n", maxLen);
}

int main()
{
	freopen("prefix.in", "r", stdin);
	freopen("prefix.out", "w", stdout);

	int t;
	scanf("%d", &t);
	
	for (int i = 0; i < t; ++i)
		solve();


	

	return 0;
}