35分求助,样例能过,悬一关
查看原帖
35分求助,样例能过,悬一关
779349
JPGOJCZX楼主2023/11/3 21:25

rt

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e5 + 9, LOGN = 23;
int f[N], fa[N][LOGN], a[29], b[29], m, p, q;
int qpow(int di, int zhi){
	int result = 1;
	while(zhi > 0){
		if(zhi % 2 == 1)
			result = result * di % p;
		zhi /= 2;
		di = di * di % p;
	}
	return result;
}
signed main(){
	scanf("%lld%lld%lld", &m, &q, &p);
	for(int i = 1; i <= m; i++)
		scanf("%lld%lld", &a[i], &b[i]);
	for(int i = 0; i < p; i++){
		for(int j = 1; j <= m; j++)
			f[i] = (f[i] + a[j] * qpow(i, b[j]) % p) % p;
		fa[i][0] = f[i];
	}
	for(int j = 1, j2 = 2; j2 <= p; j++, j2 <<= 1)
		for(int i = 0; i < p; i++)
			fa[i][j] = fa[fa[i][j - 1]][j - 1];
	for(int i = 1; i <= q; i++){
		int x, y;
		scanf("%lld%lld", &x, &y);
		x %= p;
		int t = 0;
		while(y){
			if(y & 1){
				x = fa[x][t];
			}
			++t;
			y >>= 1;
		}
		printf("%lld\n", x);
	}
	return 0;
}
2023/11/3 21:25
加载中...