@[_Chasing_](/user/471571)
by Soul_Love @ 2023-11-22 17:16:51
@[xh001](/user/598904)
@[brief_talk](/user/490712)
@[Schengquanb](/user/522067)
by Soul_Love @ 2023-11-22 17:19:30
@[Most_High_Cold](/user/489634)
by Soul_Love @ 2023-11-22 17:33:45
第31行为什么要把原字符数组处理成整型数组呢
by Second_w @ 2023-11-22 17:38:53
@[Soul_Love](/user/110009)
```cpp
#include<bits/stdc++.h>
#define int unsigned long long
using namespace std;
char g1[500010],g2[500010];
int n,jc[500010],h1[500010],p=131,l,r,s,h2[500010],ans;
inline int read()
{
int k=0,f=0;char c=getchar();
for(;!isdigit(c);c=getchar()) f|=c=='-';
for(;isdigit(c);c=getchar()) k=(k<<1)+(k<<3)+(c^48);
return f?-k:k;
}
inline int get1(int l,int r)
{
return h1[r]-h1[l-1]*jc[r-l+1];
}
inline int get2(int l,int r)
{
return h2[r]-h2[l-1]*jc[r-l+1];
}
inline int check(int len,int k)
{
if(k-len+1<=0||k+len>n) return 0;
if(get1(k-len+1,k)==get2(n-k-len+1,n-k)) return 1;
return 0;
}
signed main()
{
n=read();
scanf("%s",g1+1);
for(int i=1;i<=n;i++) g2[i]=g1[n-i+1]=='0'?'1':'0';
jc[0]=1;
for(int i=1;i<=n;i++)
{
jc[i]=jc[i-1]*p;
h1[i]=h1[i-1]*p+g1[i];
h2[i]=h2[i-1]*p+g2[i];
}
for(int i=1;i<=n;i++)
{
l=1,r=n,ans=0;
while(l<=r)
{
int m=(l+r)>>1;
if(check(m,i))
{
ans=m;
l=m+1;
}
else r=m-1;
}
s+=ans;
}
std::cout<<s;
return 0;
}
```
by Second_w @ 2023-11-22 17:40:22
@[caizilang](/user/510908) 诶,A掉了耶,谢谢
by Soul_Love @ 2023-11-22 17:42:46