Pagini recente » Cod sursa (job #2035334) | Cod sursa (job #181715) | Cod sursa (job #572451) | Cod sursa (job #284598) | Cod sursa (job #1724113)
#include <cstdio>
#include<string.h>
#define MOD1 33554431
#define MOD2 524287
#define MAX 5000
#define b 30
#define litera(x) (x-'a'+1)
using namespace std;
int v1[MAX+1], v2[MAX+1], put1[MAX+1];
char s[MAX+1];
int main()
{
freopen("triopalindrom.in", "r", stdin);
freopen("triopalindrom.out", "w", stdout);
int n, nrsecv=0, lim;
long long nr1=0;
gets(s), n=strlen(s);
put1[0]=1;
lim=n/3;
for(int i=1;i<=n;++i)
put1[i]=(put1[i-1]*b)&MOD1;
for(int k=1;k<=lim;++k)
{
int i=0;
nr1=0;
while(i<k)
{
nr1=(((nr1*b)&MOD1) + s[i])&MOD1;
++i;
}
v1[i-1]=nr1;
for(;i<n;++i)
{
nr1=nr1-((s[i-k]*put1[k-1])&MOD1);
if(nr1 < 0) nr1+=MOD1;
nr1=(((nr1*b)&MOD1) + s[i])&MOD1;
v1[i]=nr1;
}
for(i=2*k-1;i<n-k;++i)
if(v1[i-k]==v1[i] && v1[i]==v1[i+k])
nrsecv++;
for(i=0;i<n;++i)
v1[i]=-1;
}
printf("%d", nrsecv);
return 0;
}