Pagini recente » Cod sursa (job #2268323) | Cod sursa (job #381304) | Cod sursa (job #2219616) | Cod sursa (job #2016662) | Cod sursa (job #2152902)
#include <fstream>
using namespace std;
ifstream f ("pscpld.in");
ofstream g ("pscpld.out");
char a,s[3000001];
int p[3000001],n,c,r,mir;
long long sol;
int main()
{
s[0]='#';
while(f>>a)
{
s[++n]=a;
s[++n]='#';
}
--n;
c=1;
p[1]=1;
r=1;
for(int i=1;i<=n;++i)
{
mir=c-(i-c);
p[i]=min(r-i,p[mir]);
while(s[i+p[i]]==s[i-p[i]]&&(i+p[i])<=n&&(i-p[i])>0) ++p[i];
if(p[i]+i>r)
{
r=p[i]+i;
c=i;
}
}
for(int i=1;i<=n;++i)
{
--p[i];
p[i]=p[i]/2+i%2;
sol+=1ll*p[i];
}
g<<sol;
return 0;
}