Cod sursa(job #473381)
Utilizator | Data | 29 iulie 2010 11:50:21 | |
---|---|---|---|
Problema | PScPld | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 2.28 kb |
#include <fstream>
#include <stdio.h>
using namespace std;
long long suma;
char s[2000000];
int palindrom[2000000],i,n,pl;
int main()
{
freopen("pscpld.in","r",stdin);
ofstream fo("pscpld.out");
while(1) { s[++n]=getchar(); if(s[n]=='\n') break; s[++n]=' '; }
n-=2;
for(i=1;i<=n;i++)
{
if((s[i]==' ')&&(s[i+1]==s[i-1])&&(i<n)&&(i>1)) { pl=palindrom[i]*2;
pl++;
while((i+pl<=n)&&(i-pl>=1))
if(s[i+pl]==s[i-pl])
{
palindrom[i+pl-1]=palindrom[i-pl+1];
palindrom[i+pl]=palindrom[i-pl];
palindrom[i]++;
pl+=2;
} else break;
}
if(s[i]!=' ') { if(!palindrom[i]) palindrom[i]=1;
pl=palindrom[i]*2;
while((i+pl<=n)&&(i-pl>=1))
if(s[i+pl]==s[i-pl])
{
palindrom[i+pl-1]=palindrom[i-pl+1];
palindrom[i+pl]=palindrom[i-pl];
palindrom[i]++;
pl+=2;
} else break;
}
suma+=palindrom[i];
}
fo<<suma<<"\n";
fo.close();
return 0;
}