QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#67659#5099. 朝圣道wzh202130 3634ms10716kbC++141.8kb2022-12-10 21:50:032022-12-10 21:50:06

Judging History

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

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2022-12-10 21:50:06]
  • 评测
  • 测评结果:30
  • 用时:3634ms
  • 内存:10716kb
  • [2022-12-10 21:50:03]
  • 提交

answer

#pragma GCC optimize(2)
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define _1 first
#define _2 second
const int N = 1000010, L = 50;
int p;
int cnt;
pair <int, int> vec[L];
int fac[L][N];
int exgcd(int a, int b, int & x, int & y) {
	if (!b) {
		x = 1;
		y = 0;
		return a;
	}
	ll d = exgcd(b, a % b, y, x);
	y -= a / b * x;
	return d;
}
int inv(int a, int b) {
	int x, y, d = exgcd(a, b, x, y);
	int t = b / d;
	x = (x % t + t) % t;
	return x;
}
int quick_pow(int x, ll y, int p) {
	int res = 1;
	for (; y; y >>= 1, x = (ll) x * x % p)
		if (y & 1) res = (ll) res * x % p;
	return res;
}
int calc(ll n, int k) {
	int x = vec[k]._1;
	int p = vec[k]._2;
	return n ? (ll) quick_pow(fac[k][p], n / p, p) * fac[k][n % p] % p * calc(n / x, k) % p : 1;
}
int solve(ll n, int k) {
	ll cnt = 0;
	int x = vec[k]._1;
	int p = vec[k]._2;
	for (ll i = n << 1; i; i /= x) cnt += i / x;
	for (ll i = n; i; i /= x) cnt -= 2 * i / x;
	int t = calc(n, k);
	return (ll) quick_pow(x, cnt, p) * calc(n << 1, k) % p * inv((ll) t * t % p, p) % p;
}
void init(int o, int p0) {
	p = p0;
	cnt = 0;
	for (int i = 2; i * i <= p0; ++i) {
		if (p0 % i) continue;
		int d = 1;
		while (!(p0 % i)) {
			p0 /= i;
			d *= i;
		}
		vec[cnt++] = {i, d};
	}
	if (p0 > 1)
		vec[cnt++] = {p0, p0};
	for (int i = 0; i < cnt; ++i) {
		fac[i][0] = 1;
		for (int j = 1; j <= vec[i]._2; ++j)
			fac[i][j] = (ll) fac[i][j - 1] * (j % vec[i]._1 ? j : 1) % vec[i]._2;
	}
}
int Lucas(ll n) {
	int res = 0;
	for (int i = 0; i < cnt; ++i)
		res = (res + (ll) solve(n, i) * (p / vec[i]._2) % p * inv(p / vec[i]._2 % vec[i]._2, vec[i]._2) % p) % p;
	return res;
}
int ask(ll n) {
	return (ll) inv(quick_pow(4, n, p), p) * (n % p) % p * Lucas(n) % p;
}

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 0
Wrong Answer

Test #1:

score: 4
Accepted
time: 467ms
memory: 9556kb

input:

1 910276 554767
6
10
7
4
10
12
9
3
3
5
7
10
5
6
1
6
3
9
6
8
12
11
8
2
12
5
9
3
8
2
12
11
2
3
4
9
2
5
5
11
6
4
8
11
3
9
2
2
8
9
2
8
9
6
2
9
2
10
10
7
5
6
4
4
11
12
8
8
2
2
4
3
3
5
6
6
8
11
6
9
9
3
4
1
2
2
6
9
9
2
3
2
12
6
1
7
2
4
12
11
4
7
6
3
9
4
6
5
3
3
12
6
2
1
1
7
2
6
5
9
11
6
3
4
11
1
2
4
5
4
10...

output:

5419
364275
514407
329394
364275
229662
53120
520095
520095
509260
514407
364275
509260
5419
277384
5419
520095
53120
5419
115262
229662
243797
115262
416076
229662
509260
53120
520095
115262
416076
229662
243797
416076
520095
329394
53120
416076
509260
509260
243797
5419
329394
115262
243797
520095...

result:

ok 910276 numbers

Test #2:

score: -4
Wrong Answer
time: 1813ms
memory: 7388kb

input:

1 972231 293475
7
1
9
6
5
1
11
5
5
12
2
2
7
3
4
10
10
3
2
10
7
1
10
9
1
3
5
6
7
2
7
4
1
10
1
9
3
10
10
2
6
11
4
10
12
8
5
2
12
4
9
12
7
2
12
4
3
1
2
9
12
1
4
5
6
12
6
5
9
2
5
12
3
4
6
12
12
2
1
6
4
12
10
5
12
7
9
8
3
8
10
5
3
6
12
7
7
10
7
10
8
7
7
2
2
4
8
6
10
8
11
6
11
10
3
9
5
2
5
1
10
2
11
4
4
3...

output:

238336
146738
140514
163689
42090
146738
174938
42090
42090
245142
24457
24457
238336
49158
71326
100060
100060
49158
24457
100060
238336
146738
100060
140514
146738
49158
42090
163689
238336
24457
238336
71326
146738
100060
146738
140514
49158
100060
100060
24457
163689
174938
71326
100060
245142
1...

result:

wrong answer 1st numbers differ - expected: '117936', found: '238336'

Subtask #2:

score: 0
Skipped

Dependency #1:

0%

Subtask #3:

score: 12
Accepted

Test #5:

score: 12
Accepted
time: 7ms
memory: 4660kb

input:

3 1 334547
8234

output:

179079

result:

ok 1 number(s): "179079"

Subtask #4:

score: 18
Accepted

Dependency #3:

100%
Accepted

Test #6:

score: 18
Accepted
time: 831ms
memory: 9800kb

input:

4 1000000 581873
49881
62491
206405
26106
129239
174098
141494
61402
149825
241992
8109
243567
71918
203927
278575
263516
143582
32237
195508
269119
9111
105700
80919
229859
150334
171917
78447
62500
190063
138903
6395
222902
118653
136505
242467
64984
170330
287622
27089
35823
107672
273459
188857
...

output:

225562
278095
494263
533616
449513
172629
433105
169217
156602
470240
127840
224903
148625
143635
385698
428034
270424
224704
326598
317786
205590
556103
563899
492571
87003
417735
350849
476300
65308
462020
373541
56205
35476
425631
345156
395965
377993
402141
119653
299737
4555
400632
420936
58015...

result:

ok 1000000 numbers

Subtask #5:

score: 0
Wrong Answer

Dependency #4:

100%
Accepted

Test #7:

score: 0
Wrong Answer
time: 3634ms
memory: 10716kb

input:

5 1000000 840643
596357868225427095
792903040511847841
549819683428503148
982786835970534376
855138540813992974
101968907510306081
885121351101383723
127972727417081251
728407510651610501
998897446686193527
889398142082696651
17276066104970301
87773104284997915
716559595019194816
538865162230963483
...

output:

646924
149057
63734
125684
266228
294243
13853
204048
169981
228343
618602
241533
403028
444568
750856
374964
243219
264897
732729
264397
271114
533927
326803
794246
379491
149146
674660
484830
723668
282454
311655
41768
123449
5616
670015
171419
611949
203696
491889
132569
304678
550597
310490
7891...

result:

wrong answer 1st numbers differ - expected: '0', found: '646924'

Subtask #6:

score: 0
Time Limit Exceeded

Test #8:

score: 0
Time Limit Exceeded

input:

6 958477 522361
280121915553826833
734266539148641647
72849162479700582
274266741463686096
60278972064195458
828423669427600612
571432949203039978
518511460268700898
486268614705621285
19216283231217074
611458416727512530
175147354285288662
799769622289998997
400123443628688299
145546980862133838
40...

output:

Unauthorized output

result:


Subtask #7:

score: 0
Wrong Answer

Dependency #3:

100%
Accepted

Test #13:

score: 0
Wrong Answer
time: 2ms
memory: 3416kb

input:

7 1 731039
314313205082038759

output:

77286

result:

wrong answer 1st numbers differ - expected: '0', found: '77286'

Subtask #8:

score: 0
Wrong Answer

Test #33:

score: 0
Wrong Answer
time: 77ms
memory: 3628kb

input:

8 9963 251
831797004675585320
494759973681332858
701341496127272302
252910460485222469
250965009655458584
366193481309061299
633134388675839346
791999098066205672
196620805863610860
363773642045280947
466508590762410710
407790578717064135
181590911404670570
570642047249889864
70138464625729452
23634...

output:

44
235
58
134
218
145
17
50
182
3
67
148
107
93
235
190
223
29
243
245
106
44
27
99
204
231
98
224
188
150
141
175
3
86
99
60
223
133
232
36
3
242
3
122
222
64
244
170
73
167
174
247
232
207
134
117
64
156
89
104
167
8
44
134
131
80
201
168
163
235
47
205
41
240
59
227
201
147
168
10
20
115
57
30
72...

result:

wrong answer 1st numbers differ - expected: '0', found: '44'

Subtask #9:

score: 0
Skipped

Dependency #2:

0%