Pagini recente » Cod sursa (job #270922) | Cod sursa (job #2594441) | Cod sursa (job #2470483) | Cod sursa (job #2715324) | Cod sursa (job #1068896)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("pscpld.in");
ofstream fout("pscpld.out");
#define MAX 1001000
#define mx id+p[id]
char a[MAX], s[2*MAX+1];
int p[2*MAX+1];
int i, S;
int main()
{
fin>>a;
s[0]='&';
s[1]='#';
for(i=0;a[i]!='\0';i++)
{
s[2*i+2]=a[i];
s[2*i+3]=s[1];
}
int id=0;
p[id]=0;
for (i = 1; s[i] != '\0'; i++) {
p[i] = mx > i ? min(p[2*id-i], mx-i) : 1;
while (s[i + p[i]] == s[i - p[i]]) p[i]++;
if (i + p[i] > mx) {
id = i;
}
}
for(i=1;s[i]!='\0';i++)
{
S+=p[i]/2;
}
fout<<S;
}