Pagini recente » Cod sursa (job #3004826) | Cod sursa (job #1927062) | Cod sursa (job #1071672) | Cod sursa (job #3174728) | Cod sursa (job #44492)
Cod sursa(job #44492)
#include <stdio.h>
#define NMAX 2000020
char S[NMAX], s[1000010];
int V[NMAX], N;
int main()
{
int i, j, max, poz=0, num, sum=0;
freopen("pscpld.in", "r", stdin);
gets(s);
N = strlen(s);
for (i = 0; i < N; i++)
S[poz++] = s[i], S[poz++] = ' ';
N = poz;
poz = 0; max = 1;
V[0] = 1; i = 1;
while (i<N)
{
if (i-poz+1 <= max)
{
j = poz-1;
while (i < poz+max) V[i++] = V[j--];
}
else
{
j = num = 0;
while (S[i-j]==S[i+j] && i>=j)
{
if (S[i-j] != ' ') num++;
j++;
}
if ((S[i] == ' ' && j%2 == 0) || (S[i] !=' '))
V[i] = 2*num-((i+1)%2);
max = V[i]; poz = i;
i++;
}
}
for (i = 0; i < N; i++) sum+=V[i];
freopen("pscpld.out", "w", stdout);
printf("%d\n", sum);
return 0;
}