求助为什么本地NOILinux和洛谷没有RE
  • 板块学术版
  • 楼主Deepth
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/10/22 16:39
  • 上次更新2023/10/22 16:43:05
查看原帖
求助为什么本地NOILinux和洛谷没有RE
788123
Deepth楼主2023/10/22 16:39

rt,cspT2bf,代码中字符串的下标明显到负数了。

#include<bits/stdc++.h>
using namespace std;
#define int long long
constexpr int N=2e6+10,P=1e9+7;
int rd(){
	static int fu,num;static char c;fu=0,num=0;
	while(!isdigit(c))if((c=getchar())=='-')fu=1;
	while(isdigit(c))num=num*10+c-'0',c=getchar();
	return fu?-num:num;
}
#ifdef LOCAL
#define D if(1)
#define print(x) cout<<__LINE__<<#x<<": "<<x<<endl;
#else
#define D if(0)
#define print(x)
#endif
int n,ans;
string s;
int f[N],lp[N];
int st[N];
signed main(){
	// freopen(R"(game.in)","r",stdin);
	// freopen(R"(game.out)","w",stdout);
	n=rd();cin>>s;s=" "+s;
	// iota(lp,lp+n+1,0);
	memset(lp,-1,sizeof(lp));
	for(int i=1;i<=n;i++){
		// if(s[i]==s[lp[i-1]])lp[i]=lp[i-1]-1;
		// if(s[i]==s[i-1])lp[i]=i-2;
		st[0]=0;
		for(int j=i,R=i-(n<=8000?8000:500);j>=R;j--){
			if(st[st[0]]==s[j])st[0]--;
			else st[++st[0]]=s[j];
			if(st[0]==0){
				lp[i]=j-1;
				break;
			}
		}
	}
	for(int i=1;i<=n;i++)if(lp[i]!=-1){
		int tmp=1+f[lp[i]];
		f[i]=tmp;ans+=tmp;
		// cout<<i<<":"<<lp[i]<<" "<<f[i]<<"\n";
	}
	cout<<ans<<endl;
	fclose(stdin);
	fclose(stdout);
	return 0;
}

2023/10/22 16:39
加载中...