求助,大面积RE
查看原帖
求助,大面积RE
500031
FJ_OIer楼主2024/11/12 21:11
#include <bits/stdc++.h>
#define int __int128
#define MOD 1000000007
using namespace std;
int n,m,q,st,k;
int f[200001][70],g[200001][70];
string s;
queue<int> qu;
template <typename T>
inline void read(T &x) {
    x=0;
    int f=1;
    char ch=getchar();
    while (!isdigit(ch)){
        if (ch=='-'){
            f=-1;
        }
        ch=getchar();
    }
    while(isdigit(ch)){
        x=x*10+(ch-'0');
        ch=getchar();
    }
    x*=f;
}
template <typename T>
void write(T x) {
    if(x<0) {
        putchar('-');
        x=-x;
    }
    if(x>9) {
        write(x/10);
    }
    putchar(x%10+'0');
}
signed main(){
	read(n);
	read(m);
	read(q);
	cin>>s;
	s=s+s;
	for (int i=2*n-1;i>=0;i--){
		while (!qu.empty()&&qu.front()-i>m){
			qu.pop();
		}
		if (!qu.empty()){
			f[i][0]=qu.front()%n;
			g[i][0]=qu.front()-i;
		}else{
			f[i][0]=(i+1)%n;
			g[i][0]=1;
		}
		if (s[i]==49){
			qu.push(i);
		}
	}
	for (int j=1;j<=65;j++){
		for (int i=0;i<n;i++){
			f[i][j]=f[f[i][j-1]][j-1];
			g[i][j]=(g[i][j-1]+g[f[i][j-1]][j-1])%MOD;
		}
	}
	while (q--){
		read(st);
		read(k);
		int ans=st%MOD;
		for (int base=0,p=(st-1)%n;k;base++,k>>=1){
			if (k&1){
				ans=(ans+g[p][base])%MOD;
				p=f[p][base];
			}
		}
		write(ans);
		cout<<endl;
	}
	return 0;
}
2024/11/12 21:11
加载中...