求助为何RE
查看原帖
求助为何RE
235901
Always_Remember_It楼主2024/11/24 21:14

加入unsigned 后就不会了但是WA75pts了,请问为什么

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=2e5+10;
const int Mod=1e9+7;
int n,m,q,lst[N];
int p[N],dp[N][61],num[N][61];
signed main(){
	cin>>n>>m>>q;
	string s;cin>>s;
	s=' '+s;
	int nxt=0;
	for(int i=1;i<=n;i++){
		if(s[i]=='1') nxt=i;
		lst[i]=nxt;
	}
	for(int i=1;i<=n;i++){
		int l1=i,r1=0,l2=1,r2=0;
		int now=(i+m-1)/n*n-n;
		if(now<0) now=0;
		r1=min(n,i+m);
		if(i+m>n) r2=(i+m-1)%n+1;
		if(lst[r2]>=l2) p[i]=n-i+lst[r2]+now;
		else if(now>0) p[i]=now-i+lst[n];
		else if(lst[r1]>i) p[i]=lst[r1]-i;
		else p[i]=1;
		dp[i][0]=(p[i]+i-1)%n+1;
		num[i][0]=(p[i]+i-1)/n*n;
	}
	for(int i=1;i<=60;i++){
		for(int j=1;j<=n;j++){
			dp[j][i]=dp[dp[j][i-1]][i-1]+num[dp[j][i-1]][i-1];
			num[j][i]=num[j][i-1]+(dp[j][i]-1)/n*n;
			dp[j][i]=(dp[j][i]-1)%n+1;
		}
	}
	while(q--){
		int s,k;cin>>s>>k;
		int x=k,ans=(s-1)/n*n;
		s=(s-1)%n+1;
		for(int i=60;i>=0;i--){
			if(x-pow(2,i)>=0){
				ans+=num[s][i]%Mod;
				s=dp[s][i];
				x-=pow(2,i);
			}
		}
		cout<<(ans+s)%Mod<<endl;
	}
	return 0;
}
2024/11/24 21:14
加载中...