~~何不用PAM~~
by duyi @ 2019-08-12 16:11:07
我也是70qwq 可能是一样的问题
```
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<vector>
#define f(a,b,c) for(register int a=(b);a<=(c);a++)
#define ff(a,b,c) for(register int a=(b);a>=(c);a--)
#define inf 9223372036854775807
#define wer rd()
#define pc putchar('\n')
#define ps putchar(' ')
#define ll long long
using namespace std;
inline ll rd()
{
ll ans;char t,k;
while(((t=getchar())!='-')&&(t>'9'||t<'0'));
k=(t=='-');
ans=k?0:(t-'0');
while((t=getchar())>='0'&&t<='9')ans=ans*10+t-'0';
return k?-ans:ans;
}
inline void wt(ll k)
{
if(k<0)putchar('-'),wt(-k);
else{
if(k<10)putchar('0'+k);
else wt(k/10),putchar('0'+k%10);
}
return;
}
inline ll min(ll a,ll b)
{
return a>b?b:a;
}
inline ll max(ll a,ll b)
{
return a<b?b:a;
}
char t[5000100],s[5000500];
int n,r[1000500];
int main()
{
cin>>n;
cin>>(t+1);
s[0]='@';
f(i,1,n)
{
s[i*2-1]='#';
s[i*2]=t[i];
}
s[n*2+1]='#';
s[n*2+2]='$';
int maxlen,p,ans;maxlen=p=ans=0;
for(register int i=1;i<=n*2+1;i+=2)
{
if(i<maxlen)r[i]=min(maxlen-i,r[p*2-i]);
else r[i]=1;
while((s[i+r[i]]-'0'+s[i-r[i]]-'0'==1)||(s[i+r[i]]==s[i-r[i]]&&s[i-r[i]]=='#'))r[i]++;
if(i+r[i]>maxlen)
{
p=i;
maxlen=i+r[i];
}
ans+=r[i]/2;
}
wt(ans);
}
```
望大佬相助qwq
by Nerovix @ 2019-08-12 23:50:35
顶
by Nerovix @ 2019-08-12 23:50:48
@[_OiNksEduCn_](/space/show?uid=164437)
您好,算法没有问题,ans 没开 long long 。
记录请见:[####](https://www.luogu.org/record/24365827)
by jyi2ya @ 2019-09-26 16:46:00
@[HNFMS_HeJiayi](/user/87267) 感谢,我也70变100了(/≧▽≦/)
by 可爱的Flandre酱 @ 2020-08-12 15:02:50