RE35分求助,不知道哪里数组越界了
查看原帖
RE35分求助,不知道哪里数组越界了
958675
Linzijian2012楼主2023/11/5 11:48

记录列表

//P9816
#include <cmath>
#include <cstdio>
using namespace std;
const int N = 1000005;
const int M = 30;
int m, a[M], b[M], q, p;
long long f[N][30];
long long power(int A, int B){
	long long res = 1;
	while (B){
		if (B & 1){
			res = (res * A) % p;
		}
		A = (A * A) % p;
		B >>= 1;
	}
	return res;
}
int main(){
	scanf("%d%d%d", &m, &q, &p);
	for (int i = 1; i <= m; i++){
		scanf("%d%d", &a[i], &b[i]);
		a[i] %= p;
	}
	for (int i = 0; i < p; i++){
		for (int j = 1; j <= m; j++){
			long long now = (a[j] * power(i, b[j])) % p;
			f[i][0] = (f[i][0] + now) % p;
		}
	}
	for (int j = 1; j <= 25; j++){
		for (int i = 0; i < p; i++){
			f[i][j] = f[f[i][j - 1] % p][j - 1] % p;
		}
	}
	while (q--){
		long long x, y, ceng = 0;
		scanf("%lld%lld", &x, &y);
		x %= p;
		while (y){
			if (y & 1){
				x = f[x][ceng];
			}
			ceng++;
			y >>= 1;
		}
		printf("%lld\n", x);
	}
	return 0;
}

蒟蒻测了一下,是在36行之前的代码会RE,但是查不出来,回复必关。

2023/11/5 11:48
加载中...