为什么第二个点会WA
查看原帖
为什么第二个点会WA
1337754
crazy_psycho楼主2024/11/9 16:38

本来以为能得60分的,但第二个测试点WA了

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
typedef long long ll;
const ll MOD=1e9+7;
ll n,m,q;
string s;
int F0;
int F1;
ll nxt[50000010];
int main(){
	//freopen("kingdom4.in","r",stdin);
	//freopen("kingdom4.out","w",stdout);
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>n>>m>>q;
	cin>>s;
	for(int i=0;i<s.size();i++){
		if(s[i]=='1') F1=1;
		if(s[i]=='0') F0=1;	
	}
	if(!F1){
		while(q--){
			ll st,k;
			cin>>st>>k;
			cout<<(st%MOD+k%MOD)%MOD<<endl;
		}
	}
	else if(!F0){
		while(q--){
			ll st,k;
			cin>>st>>k;
			cout<<(st%MOD+(k%MOD)*(m%MOD))%MOD<<endl;
		}
	}
	
	else if(n<=200){
		string ss;
		for(int i=1;i<=110;i++){
			ss+=s;			                                                                                                                    
		}
		ss="*"+ss; 
		while(q--){
			ll st,k;
			cin>>st>>k;
			while(k--){
				int f=0;
				for(int i=m+st;i>=st+1;i--){
					//cout<<ss[i]<<" ";
					if(ss[i]=='1'){
						f=1;
						st=i;
						break;
					}
				}
				if(!f){
					st++;
				}
			}
			cout<<st<<endl;		
		}
	}
	else if(n<=5000){
		string ss="";
		for(int i=1;i<=5000;i++){
			ss+=s;			
		}
		ss="*"+ss;
		int cnt=0;
		for(int i=1;i<=ss.size()-1;i++){
			if(ss[i]=='1'){
				nxt[++cnt]=i;
			}
		}
		while(q--){
			ll st,k;
			cin>>st>>k;
			while(k--){
				int p=lower_bound(nxt+1,nxt+1+cnt,st+m)-nxt;
				while(nxt[p]>st+m){
					p--;
				}
				if(nxt[p]<=st){
					st++;
				}
				else st=nxt[p];
			}
			cout<<st<<endl;
		}
	}
	else if(n<=300000){
		string ss=s;
		ss+=s;
		ss="*"+ss;
		int cnt=0;
		for(int i=1;i<=ss.size()-1;i++){
			if(ss[i]=='1'){
				nxt[++cnt]=i;
			}
		}
		while(q--){
			ll st,k;
			cin>>st>>k;
			while(k--){
				int p=lower_bound(nxt+1,nxt+1+cnt,st+m)-nxt;
				while(nxt[p]>st+m){
					p--;
				}
				if(nxt[p]<=st){
					st++;
				}
				else st=nxt[p];
			}
			cout<<st<<endl;
		}
	}
	else {
		while(q--){
			ll s,k;
			cin>>s>>k;
			if(k==0){
				cout<<s%MOD<<endl;
			}
		}
	}
} 
2024/11/9 16:38
加载中...