QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#368961#5099. 朝圣道zyc07041944 1854ms20404kbC++204.0kb2024-03-27 18:32:562024-03-27 18:32:56

Judging History

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

  • [2024-03-27 18:32:56]
  • 评测
  • 测评结果:44
  • 用时:1854ms
  • 内存:20404kb
  • [2024-03-27 18:32:56]
  • 提交

answer

#pragma GCC optimize("Ofast")
#include <bits/stdc++.h>
#define ll long long
#include "pilgrimage.h"
using namespace std;

int mod, inv, Phi = 1;

inline int add(int x, int y) {x += y; return x >= mod ? x - mod : x;}
inline int del(int x, int y) {x -= y; return x < 0 ? x + mod : x;}
inline void Add(int &x, int y) {x = add(x, y);}
inline void Del(int &x, int y) {x = del(x, y);}
inline int qpow(int x, ll y) {
	if (y >= Phi) y %= Phi, y += Phi;
	int res = 1;
	while (y) {
		if (y & 1ll) res = 1ll * res * x % mod;
		x = 1ll * x * x % mod;
		y >>= 1;
	}
	return res;
}

namespace my_ex_Lucas {
	struct node {
		int p, c, pw, m, im, phi;
		vector<int> pre, qpw, iv;
	};
	ll lstn;
	int p, cnt, lstid, lstans;
	node a[20];
	
	void ex_gcd(int A, int B, int &x, int &y) {
		if (!B) return x = 1, y = 0, void();
		int xx, yy;
		ex_gcd(B, A % B, xx, yy);
		x = yy; y = xx - A / B * yy;
	}
	inline int get_inv(int v, int mod) {
		int x, y;
		ex_gcd(v, mod, x, y);
		x = (x % mod + mod) % mod;
		assert(1ll * v * x % mod == 1);
		return x;
	}
	
	void init(int P) {
		int x = p = P; cnt = 0;
		for (int i = 2; i * i <= x; ++i) {
			if (x % i) continue;
			int num = 0, now = 1;
			while (x % i == 0) num++, now *= i, x /= i;
			cnt++;
			a[cnt].p = i; a[cnt].c = num; a[cnt].pw = now; a[cnt].m = p / now; a[cnt].im = get_inv(a[cnt].m % a[cnt].pw, a[cnt].pw);
			a[cnt].m = 1ll * a[cnt].m % p * a[cnt].im % p;
			a[cnt].phi = now - now / i;
			a[cnt].pre.resize(now);
			a[cnt].pre[0] = 1;
			for (int j = 1; j < now; ++j) a[cnt].pre[j] = 1ll * a[cnt].pre[j - 1] * (j % i == 0 ? 1 : j) % now;
			a[cnt].qpw.resize(a[cnt].phi * 2);
			a[cnt].qpw[0] = 1;
			for (int j = 1; j < a[cnt].phi * 2; ++j) a[cnt].qpw[j] = 1ll * a[cnt].qpw[j - 1] * a[cnt].pre[now - 1] % now;
			a[cnt].iv.resize(now);
			for (int j = 1; j < now; ++j)
				if (j % i) a[cnt].iv[j] = get_inv(j, now);
			Phi *= a[cnt].phi;
		}
		if (x > 1) {
			Phi *= (x - 1);
			cnt++;
			a[cnt].p = x; a[cnt].c = 1; a[cnt].pw = x; a[cnt].m = p / x; a[cnt].im = get_inv(a[cnt].m % a[cnt].pw, a[cnt].pw);
			a[cnt].phi = x - 1;
			a[cnt].pre.resize(x);
			a[cnt].pre[0] = 1;
			for (int j = 1; j < x; ++j) a[cnt].pre[j] = 1ll * a[cnt].pre[j - 1] * j % x;
			a[cnt].qpw.resize(a[cnt].phi * 2);
			a[cnt].qpw[0] = 1;
			for (int j = 1; j < a[cnt].phi * 2; ++j) a[cnt].qpw[j] = 1ll * a[cnt].qpw[j - 1] * a[cnt].pre[x - 1] % x;
			a[cnt].iv.resize(x);
			for (int j = 1; j < x; ++j) a[cnt].iv[j] = get_inv(j, x);
		}
	}
	
	int calc(ll n, int id) {
		if (n == lstn) return lstans;
		lstn = n;
		ll mem = n / a[id].pw;
		if (mem >= a[id].phi) mem = mem % a[id].phi + a[id].phi;
		return lstans = 1ll * a[id].qpw[mem] * a[id].pre[n % a[id].pw] % a[id].pw;
	}
	
	int work(ll n, ll m, int id) {
		int o = 0, res = 1, ire = 1;
		res = calc(n, id);
		ire = 1ll * calc(m, id) * calc(n - m, id) % a[id].pw;
		for (ll now = a[id].p; now <= n;) {
			o += n / now - m / now - (n - m) / now;
			res = 1ll * res * calc(n / now, id) % a[id].pw;
			ire = 1ll * ire * calc(m / now, id) % a[id].pw * calc((n - m) / now, id) % a[id].pw;
			if (n / a[id].p < now) break;
			now *= a[id].p;
		}
		res = 1ll * res * a[id].iv[ire] % a[id].pw;
		if (o >= a[id].c) return 0;
		while (o--) res = 1ll * res * a[id].p % a[id].pw;
		return res;
	}
	
	int ex_Lucas(ll n, ll m) {
		if (n < 0 || m < 0 || n < m) return 0;
		int res = 0;
		for (int i = 1; i <= cnt; ++i) {
			lstn = -1;
			int tmp = work(n, m, i);
			res = (res + 1ll * tmp * a[i].m % p) % p;
		}
		return res;
	}
}

using my_ex_Lucas :: ex_Lucas;

void init(int o, int p) {
	mod = p;
	inv = (mod + 1) / 2;
	my_ex_Lucas :: init(p);
}

int ask(ll n) {
	if (n == 1) return inv;
	n--;
	int val = (2ll * n - 1) % mod;
	val = 8ll * val * (val + 2) % mod;
	int tmp1 = ex_Lucas(2ll * n - 2, n - 1);
	int tmp2 = ex_Lucas(2ll * n - 2, n - 2);
	val = 1ll * val * del(tmp1, tmp2) % mod;
	val = 1ll * val * qpow(inv, 2ll * n + 3) % mod;
	return val;
}

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 0
Wrong Answer

Test #1:

score: 4
Accepted
time: 144ms
memory: 15884kb

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: 448ms
memory: 7736kb

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:

193011
146738
200070
200739
182490
146738
1638
182490
182490
28392
97257
97257
193011
194940
31780
15535
15535
194940
97257
15535
193011
146738
15535
200070
146738
194940
182490
200739
193011
97257
193011
31780
146738
15535
146738
200070
194940
15535
15535
97257
200739
1638
31780
15535
28392
101985
...

result:

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

Subtask #2:

score: 0
Skipped

Dependency #1:

0%

Subtask #3:

score: 12
Accepted

Test #5:

score: 12
Accepted
time: 33ms
memory: 10388kb

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: 313ms
memory: 16184kb

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: 14
Accepted

Dependency #4:

100%
Accepted

Test #7:

score: 14
Accepted
time: 566ms
memory: 20404kb

input:

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

output:

0
149057
0
0
0
0
13853
0
0
0
618602
0
0
0
0
0
243219
264897
0
0
0
0
0
0
0
0
0
0
0
0
311655
0
0
0
670015
171419
0
0
0
0
0
0
0
0
763198
247491
0
0
0
0
0
0
0
0
0
0
0
513609
0
0
0
0
0
0
0
0
0
0
0
0
0
0
37092
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
720992
0
0
456272
0
0
0
0
0
210850
0
0
0
0
0
383431
0
0
...

result:

ok 1000000 numbers

Subtask #6:

score: 0
Wrong Answer

Test #8:

score: 0
Wrong Answer
time: 1854ms
memory: 8288kb

input:

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

output:

0
0
0
0
0
0
0
0
0
0
0
310618
0
0
0
444899
0
0
0
0
0
284137
0
0
0
0
0
75432
0
0
0
0
0
0
0
0
0
485716
0
484288
0
0
0
166817
0
282639
0
0
0
0
0
0
0
0
0
0
182098
130753
0
0
0
0
0
0
0
0
0
0
262024
0
0
455476
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
279405
0
0
0
292831
0
0
0
0
0
0
0
0
0
0
0
336035
0
0
0
0
0
0
0
0
...

result:

wrong answer 12th numbers differ - expected: '193620', found: '310618'

Subtask #7:

score: 0
Wrong Answer

Dependency #3:

100%
Accepted

Test #13:

score: 8
Accepted
time: 1ms
memory: 5632kb

input:

7 1 731039
314313205082038759

output:

0

result:

ok 1 number(s): "0"

Test #14:

score: 0
Accepted
time: 1ms
memory: 5820kb

input:

7 1 587945
675184352277027016

output:

0

result:

ok 1 number(s): "0"

Test #15:

score: 0
Accepted
time: 10ms
memory: 6744kb

input:

7 1 732151
522404464427087971

output:

0

result:

ok 1 number(s): "0"

Test #16:

score: 0
Accepted
time: 0ms
memory: 5652kb

input:

7 1 952025
865782493150981281

output:

0

result:

ok 1 number(s): "0"

Test #17:

score: 0
Accepted
time: 1ms
memory: 5880kb

input:

7 1 151005
80048698775676684

output:

0

result:

ok 1 number(s): "0"

Test #18:

score: 0
Accepted
time: 1ms
memory: 5700kb

input:

7 1 819153
214538328031265195

output:

0

result:

ok 1 number(s): "0"

Test #19:

score: 0
Accepted
time: 0ms
memory: 5608kb

input:

7 1 84501
605460166753167761

output:

0

result:

ok 1 number(s): "0"

Test #20:

score: 0
Accepted
time: 1ms
memory: 5692kb

input:

7 1 579977
434091105518396762

output:

0

result:

ok 1 number(s): "0"

Test #21:

score: 0
Accepted
time: 0ms
memory: 5612kb

input:

7 1 161075
649828935660369724

output:

0

result:

ok 1 number(s): "0"

Test #22:

score: 0
Accepted
time: 1ms
memory: 5700kb

input:

7 1 629595
216539117331686464

output:

0

result:

ok 1 number(s): "0"

Test #23:

score: 0
Accepted
time: 1ms
memory: 5832kb

input:

7 1 317005
831315176686118434

output:

0

result:

ok 1 number(s): "0"

Test #24:

score: 0
Accepted
time: 0ms
memory: 5676kb

input:

7 1 204399
934354294367869212

output:

0

result:

ok 1 number(s): "0"

Test #25:

score: 0
Accepted
time: 1ms
memory: 5776kb

input:

7 1 98233
515248809013032256

output:

0

result:

ok 1 number(s): "0"

Test #26:

score: -8
Wrong Answer
time: 1ms
memory: 5784kb

input:

7 1 738315
930635383520033839

output:

322380

result:

wrong answer 1st numbers differ - expected: '51840', found: '322380'

Subtask #8:

score: 0
Wrong Answer

Test #33:

score: 16
Accepted
time: 7ms
memory: 5732kb

input:

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

output:

0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
204
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
63
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0...

result:

ok 9963 numbers

Test #34:

score: 0
Accepted
time: 6ms
memory: 5724kb

input:

8 9967 6043
820328543276206812
181987384710842549
607221769552657162
341958396909446562
323372299362111304
912735937493462137
261510727281638358
792961465908198578
724729139273707925
61144688983588693
803871679975888144
565482268842659147
653581946336745517
701605486107526593
237425098688490866
3911...

output:

0
0
0
4601
3550
0
0
0
0
0
0
0
4890
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1943
0
0
0
3598
0
5239
0
2888
0
0
0
3581
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
4367
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1295
0
4008
0
0
0
5375
0
0
0
0
0
0
0
0
0
0
0
0
0
...

result:

ok 9967 numbers

Test #35:

score: -16
Wrong Answer
time: 32ms
memory: 5748kb

input:

8 9958 7341
246592510376086877
843442167129623384
163968090028533751
786994286411665724
810314145468625407
382997160361312553
621227536566512389
782654969130405492
662775335088395473
723417297592011109
102999527027241303
490566704238479035
460383429537079806
770514075045815286
862086443272202320
491...

output:

0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
5625
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
6762
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
4197
0
0
0
2334
0
6003
0
0
0
0
0
0
0
0
0
0
0
0
0...

result:

wrong answer 21st numbers differ - expected: '1875', found: '5625'

Subtask #9:

score: 0
Skipped

Dependency #1:

0%