Pagini recente » Cod sursa (job #1853816) | Cod sursa (job #3205897) | Cod sursa (job #2691830) | Cod sursa (job #2064779) | Cod sursa (job #195460)
Cod sursa(job #195460)
#include <cstdio>
#include <cstring>
#define MAX_N 1000002
#define max(a,b) (a > b? a : b)
char sir[MAX_N],sir2[MAX_N];
bool takeSir(char *input,char *output,int iBegin,int iLength)
{
if ((iBegin+iLength) > (int)strlen(input))
return false;
for (int i=iBegin;i<iBegin+iLength;i++)
output[i-iBegin] = input[i];
output[iLength]='\0';
return true;
}
bool EqualyStrings(char *s,char *p)
{
int length = strlen(s);
if (length != strlen(p))
return false;
for (int i=0;i < length;i++)
if (s[i] != p[i])
return false;
return true;
}
int findPrecs(char *data)
{
int n = strlen(data);
int maxDim = 0;
for (int l=1;l<=n/2;l++)
{
bool taken = takeSir(data,sir,0,l),bPeriodicyCanContinue;
int indexLeft = l;
int nrTries = 1;
if (taken)
do
{
bPeriodicyCanContinue = false;
taken = takeSir(data,sir2,indexLeft,l);
if (taken)
{
indexLeft += l;
if (bPeriodicyCanContinue = EqualyStrings(sir,sir2))
nrTries++;
}
}while(bPeriodicyCanContinue);
if (nrTries > 1)
maxDim = max(maxDim,nrTries * l);
}
return maxDim;
}
void solve()
{
int n;
scanf("%d",&n);
char sir[MAX_N];
for (int i=0;i<n;i++)
{
scanf("%s\n",&sir);
printf("%d\n",findPrecs(sir));
}
}
int main(void)
{
freopen("strmatch.in", "r", stdin);
freopen("strmatch.out", "w", stdout);
solve();
return 0;
}