为什么下面这份代码在云斗学院全RE了,在洛谷能过35分/kk
#include<bits/stdc++.h>
#define int long long
#define ml 366171
using namespace std;
int n,f2[1000005],f1[1000005],f[8005][8005];
int cnt;
unsigned long long hs1[1000005],hs2[1000005],pw[1000005];
string s;
unsigned long long hsq(int l,int r){
return hs1[r]-hs1[l-1]*pw[r-l+1];
}
unsigned long long hsh(int l,int r){
return hs2[l]-hs2[r+1]*pw[r-l+1];
}
signed main(){
freopen("game.in","r",stdin);
freopen("game.out","w",stdout);
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin>>n>>s;
s=" "+s,pw[0]=1;
for(int i=1;i<=n;i++)pw[i]=pw[i-1]*ml;
for(int i=1;i<=n;i++)hs1[i]=hs1[i-1]*ml+s[i];
for(int i=n;i;i--)hs2[i]=hs2[i+1]*ml+s[i];
for(int i=1;i<=n;i++)for(int j=1;j<=i;j++){
if(hsq(j,i)==hsh(j,i)&&(i-j)%2){
f[j][i]=1;
}
}
for(int len=1;len<=n;len++){
for(int i=1;i+len-1<=n;i++){
int j=i+len-1;
for(int k=i;k<j;k++){
f[i][j]|=(f[i][k]&f[k+1][j]);
if(f[i][j])break;
}
if(s[i]==s[j])f[i][j]|=f[i+1][j-1];
if(f[i][j])cnt++;
}
}
cout<<cnt;
return 0;
}