#include<bits/stdc++.h>
using namespace std;
#define ull unsigned long long
#define double long double
const ull base=1e9+7;
const int N=6*1e5+10;
string s;
string t;
ull a[N],b[N],p[N];
int n;
void Hash(string s,string t){
ull ans=0;
for (signed i=0;i<=n-1;i++){
ans=ans*base+(ull)s[i];
a[i+1]=ans;
}
ans=0;
for (signed i=0;i<=n-1;i++){
ans=ans*base+(ull)t[i];
b[i+1]=ans;
}
}
ull get_hash(int l,int r,bool m){
if (!m){
return (ull)a[r]-(ull)a[l-1]*p[r-l+1];
}
else{
return (ull)b[r]-(ull)b[l-1]*p[r-l+1];
}
}
signed main()
{
cin>>n>>s;
for (int j=0;j<=n-1;j++){
char i=s[j];
if (i=='0'){
t+='1';
}
else{
t+='0';
}
}
reverse(t.begin(),t.end());
Hash(s,t);
//cout<<t<<'\n';
p[0]=1;
for (int i=1;i<=n;i++){
p[i]=p[i-1]*base;
}
int sum=0;
for (int i=1;i<=n;i++){
int l=0,r=min(i,n-i)+1,mid;
while (l+1!=r){
mid=(l+r)>>1;
int k=i+mid,o=i-mid+1;
int k2=n-i+mid,o2=n-i-mid+1;
//cout<<get_hash(o,k,0)<<" "<<get_hash(o2,k2,1)<<" "<<k<<" "<<o<<" "<<k2<<" "<<o2<<'\n';
if (get_hash(o,k,0)==get_hash(o2,k2,1)){
l=mid;
}
else{
r=mid;
}
}
sum+=l;
}
cout<<sum;
return 0;
}
开了longlong!!