求助
  • 板块学术版
  • 楼主DerrickLo
  • 当前回复4
  • 已保存回复4
  • 发布时间2023/10/22 20:13
  • 上次更新2023/11/2 11:48:54
查看原帖
求助
366171
DerrickLo楼主2023/10/22 20:13

为什么下面这份代码在云斗学院全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;
}
2023/10/22 20:13
加载中...