QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#55639#4495. Shinobu loves tripzzxzzx123AC ✓2548ms60064kbC++1.4kb2022-10-14 21:25:452022-10-14 21:25:47

Judging History

你现在查看的是最新测评结果

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2022-10-14 21:25:47]
  • 评测
  • 测评结果:AC
  • 用时:2548ms
  • 内存:60064kb
  • [2022-10-14 21:25:45]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+40,M=1010;
struct plan{
	int s,d,infac;//表示的是s的逆元
	bool operator<(const plan& a)	const {
		return d<a.d;
	}
}q[M];
int x[M];
ll ksm(ll a,ll b,ll mod)
{
	ll res=1;
	while(b){
		if(b&1)
			res=res*a%mod;
		a=a*a%mod;
		b=b>>1;
	}
	return res;
}
int main(){
	int t;
	scanf("%d",&t);
	while(t--){
		int p,a,n,m;
		map<int,int>mp;//手动初始化
		scanf("%d%d%d%d",&p,&a,&n,&m);
		int ma=0;
		for(int i=1;i<=n;i++){
			scanf("%d%d",&q[i].s,&q[i].d);
			if(!q[i].s)	q[i].infac=1;
			else q[i].infac=ksm(q[i].s,p-2,p);
			ma=max(ma,q[i].d);			
		}
		//答案为1的话一定是0
		ll val=a%p;
		for(int i=1;i<=ma;i++,val=val*a%p){
			if(!mp[val])
				mp[val]=i;//首先出现的话,否则的话就就不要了
		}
		sort(q+1,q+n+1);
		for(int i=1;i<=m;i++){
			scanf("%d",&x[i]);//开始进行操作
			int cnt=0;
			for(int j=1;j<=n;j++){
				if(!x[i]){
					if(!q[j].s){
						cnt++;
					}
					continue;
				}
				if(!q[j].s)	continue;//这个时候一定没有答案了啊
				ll v=(ll)x[i]*q[j].infac%p;
				if(v==1){
					cnt++;
					continue;//记得特判
				}
//				cout<<" ceil "<<v<<endl;
				if(!mp[v])	continue;
//				cout<<" debug "<<v<<" "<<mp[v]<<endl;
				if(mp[v]<=q[j].d)	cnt++;
			}
			printf("%d\n",cnt);
		}
	}
	return 0;
}

詳細信息

Test #1:

score: 100
Accepted
time: 2548ms
memory: 60064kb

input:

5
999999937 4628 1000 1000
162585517 24584
407438671 108585
46973547 132178
142179754 23710
198067620 130706
829852550 190969
676555968 2127
717426372 80994
332054419 1078
471194333 66473
105470508 154839
939339406 89663
73289403 90982
529133484 198011
526081635 28219
405427868 174742
120011816 6408...

output:

167
166
168
168
174
169
2
167
169
22
153
169
150
163
7
152
149
166
166
176
63
178
125
170
94
167
155
173
56
147
163
169
167
183
78
165
179
173
182
170
166
150
152
166
169
169
169
173
162
52
180
182
170
163
173
173
175
150
171
166
170
148
170
166
63
168
172
151
150
72
129
14
61
167
167
169
174
133
17...

result:

ok 5000 lines