WA 90pts 求 Hack
查看原帖
WA 90pts 求 Hack
807826
zjpwdyf楼主2024/11/10 22:05

WA on #14 #15,调了一晚上了(

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const ll N = 2e5 + 5, mod = 1e9 + 7;
int n, q;
ll m, s, k, st[N][65], ts[N][65];
char str[N * 2];

int main() {
	//freopen("kingdom5.in", "r", stdin);
	//freopen("my.out", "w", stdout);
	ios :: sync_with_stdio(0);
	cin.tie(0);
	
	cin >> n >> m >> q >> str;
	
	for(int i = 0; i < n; i++) str[i + n] = str[i];
	int mn = -2e9;
	for(int i = 1; i < m % n; i++)
		if(str[i] == '1') mn = i;
	for(int i = 0; i < n; i++) {
		if(str[i + m % n] == '1') mn = i + m % n;
		/*
		st[i][0] = (m / n * n + (mn > i ? mn - i : 1)) % mod;
		ts[i][0] = (m / n * n + (mn > i ? mn - i : 1)) % n;
		*/
		if(m / n * n + mn > i) st[i][0] = (m / n * n + mn - i) % mod;
		else st[i][0] = 1;
		if(m / n * n + mn > i) ts[i][0] = (mn - i) % n;
		else ts[i][0] = 1;
		//cout << i << ' ' << i + st[i][0] << "   " << mn << endl;
	}
	for(int j = 1; j <= 63; j++)
		for(int i = 0; i < n; i++) {
			ll m = (i + ts[i][j - 1]) % n;
			st[i][j] = (st[i][j - 1] + st[m][j - 1]) % mod;
			ts[i][j] = (ts[i][j - 1] + ts[m][j - 1]) % n;
		}
	while(q--) {
		cin >> s >> k;
		s--;
		ll now = s % n;
		for(ll i = 63; i >= 0; i--)
			if(k >> i & 1) {
				s = (s + st[now][i]) % mod;
				now = (now + ts[now][i]) % n;
			}
		cout << (s + 1) % mod << endl;
	}
	return 0;
}
2024/11/10 22:05
加载中...