Pagini recente » Cod sursa (job #3224606) | Cod sursa (job #3293677) | Cod sursa (job #1944806) | Cod sursa (job #3290380) | Cod sursa (job #1821908)
//
// main.cpp
// Prefix
//
// Created by Albastroiu Radu on 11/30/16.
// Copyright © 2016 Albastroiu Radu. All rights reserved.
//
#include <iostream>
#include <iomanip>
#include <fstream>
#include <algorithm>
#include <unordered_map>
#include <vector>
#include <cstring>
#include <cmath>
using namespace std;
ifstream fin("prefix.in");
ofstream fout("prefix.out");
int main()
{
int T;
fin >> T;
while(T--)
{
string key_word, aux;
int match_key_word[1000007];
aux = " ";
fin >> key_word;
key_word = aux + key_word;
auto n = key_word.size();
int k = 0;
match_key_word[0] = 0;
match_key_word[1] = 0;
for(int i = 2; i < n; i++)
{
while(k && key_word[i] != key_word[k + 1])
k = match_key_word[k];
if(key_word[i] == key_word[k + 1])
k++;
match_key_word[i] = k;
}
int poz = 0;
int lungime_max = 0;
int Max = 0;
int last = 0;
for(int i = 2; i < n; i++)
{
last = i;
if(match_key_word[i] == 1)
{
poz = i - 1;
lungime_max = 1;
while(i < n && match_key_word[i + 1] > match_key_word[i])
{
lungime_max = max(lungime_max, match_key_word[i + 1]);
i++;
}
if(lungime_max >= poz)
Max = max(Max, (lungime_max/poz + 1) * poz);
}
if( i != last )
i--;
}
fout << Max << "\n";
}
return 0;
}