QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#406787#5099. 朝圣道ningago56 1946ms29404kbC++145.5kb2024-05-07 18:27:072024-05-07 18:27:08

Judging History

This is the latest submission verdict.

  • [2024-05-07 18:27:08]
  • Judged
  • Verdict: 56
  • Time: 1946ms
  • Memory: 29404kb
  • [2024-05-07 18:27:07]
  • Submitted

answer

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <numeric>
#include <vector>
#include <queue>
#include <map>
#include <cmath>
#include <cctype>
#include <set>
#include "pilgrimage.h"

namespace uvu
{
#define LOCAL ____________DONT_DEFINE_ME____________
// #define ll long long
// #define inf 0x3f3f3f3f
#define int long long
#define inf 0x3f3f3f3f3f3f3f3fll
#define infll 0x3f3f3f3f3f3f3f3fll
#define debug(...) fprintf(stderr, __VA_ARGS__)
#define gline debug("now is #%d\n", __LINE__)
#define pii std::pair <int, int>
#define mkp std::make_pair
#define fi first
#define se second
char _ST_;
const int BUFSIZE = (1 << 20);
char ibuf[BUFSIZE], *iS = ibuf, *iT = ibuf;
char obuf[BUFSIZE], *oS = obuf, *oT = obuf + BUFSIZE;
char getc()
{
#ifdef LOCAL
	return getchar();
#else
	if(iS == iT) iT = (iS = ibuf) + fread(ibuf, 1, BUFSIZE, stdin);
	return iS == iT ? EOF : *iS++;
#endif
#define getchar ERR
}

void Flush() { fwrite(obuf, 1, oS - obuf, stdout); oS = obuf; }
struct Flusher { ~Flusher(){ Flush(); } }iamflusher;

void putc(char c)
{
#ifdef LOCAL
	putchar(c);
#else
	*oS++ = c;
	if(oS == oT) Flush();
#endif
#define putchar ERR
}

template <typename T = int> T read()
{
	T x = 0, f = 1; char c = getc();
	for(; !isdigit(c); c = getc()) if(c == '-') f = -1;
	for(;  isdigit(c); c = getc()) x = (x << 3) + (x << 1) + (c ^ 48);
	return x * f;
}

template <typename T> void print(T x, char c)
{
static int sta[BUFSIZE], top;
	top = 0;
	if(x < 0) putc('-'), x = -x;
	if(!x) sta[top = 1] = 0;
	for(; x; x /= 10) sta[++top] = x % 10;
	for(; top; ) putc(sta[top--] ^ 48);
	if(c) putc(c);
}

int readstr(char *s, int base)
{
	int idx = base - 1; char c = getc();
	for(; !(isdigit(c) || isalpha(c) || c == '#' || c == '.'); c = getc());
	for(;   isdigit(c) || isalpha(c) || c == '#' || c == '.' ; c = getc()) s[++idx] = c;
	return idx - base + 1;
}

void printf(const char *s) { for(; *s; s++) putc(*s); }
template <typename T, typename ... Args>
void printf(const char *s, T x, Args ... rest)
{
	for(; *s; s++)
	{
		if(*s != '%') { putc(*s); continue; }
		s++; if(*s == 'd') print(x, 0);
		else if(*s == 'c') putc(x);
		printf(s + 1, rest ...);
		return;
	}
}

template <typename T> void ckmax(T &x, T y) { x = x > y ? x : y; }
template <typename T> void ckmin(T &x, T y) { x = x < y ? x : y; }
// #define mod 998244353
// #define mod 1000000007
// int mod;
// int sm(int x) { return x >= mod ? x - mod : x; }
// void plus_(int &x, int y) { x = sm(x + y); }
// void mul_(int &x, int y) { x = 1ll * x * y % mod; }
int ksm(int a, int b, int mod) { int res = 1; for(; b; b >>= 1, a = 1ll * a * a % mod) if(b & 1) res = 1ll * res * a % mod; return res; }
int id, k_[1000];
std::vector <int> pre[1000];
std::vector <int> invv[1000];
std::vector <int> poww[1000];
int f(int n, int p, int pk, int &tot)
{
	if(!n) return 1;
	int res = pre[id][pk - 1];
	res = ksm(res, n / pk, pk);
	res = 1ll * res * f(n / p, p, pk, tot) % pk;
	tot += n / p;
	res = 1ll * res * pre[id][n % pk] % pk;
	// for(int i = n / pk * pk; i <= n; i++) if(i % p) res = 1ll * res * (i % pk) % pk;//, !res && ::printf("i = %lld, res = %lld\n", i, res);
	// printf("f(%d %d %d) = %d\n", n, p, pk, res);
	return res;
}
// 0 9 999983
// 1
// 2
// 3
// 4
// 5
// 12
// 2999
// 999999
// 1000000000000000000
void exgcd(int a, int b, int &x, int &y)
{
	if(!b) { x = 1, y = 0; return; }
	exgcd(b, a % b, y, x);
	y -= a / b * x;
}

int inv(int x, int p)
{
	int res, tmp;
	exgcd(x, p, res, tmp);
	res = (res % p + p) % p;
	// printf("inv(%d %d) = %d\n", x, p, res);
	return res;
}

int calc(int n, int m, int p, int pk)
{
	int a = 0, b = 0, c = 0, res = 1;
	res = 1ll * res * f(n, p, pk, a) % pk;
	res = 1ll * res * invv[id][f(m, p, pk, b)] % pk;
	res = 1ll * res * invv[id][f(n - m, p, pk, c)] % pk;
	// if(a - b - c >= k_[id]) return 0;
	res = 1ll * res * poww[id][a - b - c] % pk;
	return res;
}

int prime[1000], primek[1000], tot, val[1000];
int exlucas(int n, int m, int P)
{
	if(n < 0 || m < 0 || n < m) return 0;
	int res = 0;
	for(int i = 1; i <= tot; i++) id = i, val[i] = calc(n, m, prime[i], primek[i]);
	for(int i = 1; i <= tot; i++) res = (res + 1ll * (P / primek[i]) * invv[i][P / primek[i] % primek[i]] % P * val[i] % P) % P;
	return res;
}
int mod, inv2;
int solve(int n)
{
	// memset(h, idx = -1, sizeof(h));
	// printf("C(%d %d) = %d\n", 2 * n, n, mod);
	int res = n % mod * ksm(inv2, 2 * n, mod) % mod * exlucas(2 * n, n, mod) % mod;
	return res;
}

char _ED_;
void init()
{
	debug("%.3f MB\n", abs(&_ST_ - &_ED_) / 1024.0 / 1024);
	inv2 = (mod + 1) / 2;
	int p = mod; tot = 0;
    for(int i = 2; i * i <= p; i++) if(!(p % i))
    {
        prime[++tot] = i, primek[tot] = 1;
		while(!(p % i)) primek[tot] *= i, p /= i, k_[tot]++;
    }
	if(p != 1) ++tot, prime[tot] = primek[tot] = p;
	for(int i = 1; i <= tot; i++)
	{
		pre[i].push_back(1);
		invv[i].push_back(1);
		poww[i].push_back(1);
		for(int j = 1; j < primek[i]; j++)
			pre[i].push_back(1ll * pre[i].back() * (j % prime[i] ? j : 1) % primek[i]),
			invv[i].push_back(inv(j, primek[i])),
			poww[i].push_back(1ll * poww[i].back() * prime[i] % primek[i]);
	}
}


#ifdef int
	#undef int
#endif
}

// int main()
// {
// 	freopen("tmp.in", "r", stdin);
// 	freopen("tmp.out", "w", stdout);
// 	uvu::mian(); return 0;
// }

void init (int o, int p)
{
	uvu::mod = p;
	uvu::init();
	return;
}
int ask (long long n)
{
	return uvu::solve(n);
}

詳細信息

Subtask #1:

score: 4
Accepted

Test #1:

score: 4
Accepted
time: 146ms
memory: 26636kb

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
Accepted
time: 479ms
memory: 9388kb

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:

117936
146738
29445
289464
209790
146738
240513
209790
209790
158067
220107
220107
117936
201765
284305
145210
145210
201765
220107
145210
117936
146738
145210
29445
146738
201765
209790
289464
117936
220107
117936
284305
146738
145210
146738
29445
201765
145210
145210
220107
289464
240513
284305
14...

result:

ok 972231 numbers

Subtask #2:

score: 8
Accepted

Dependency #1:

100%
Accepted

Test #3:

score: 8
Accepted
time: 190ms
memory: 20088kb

input:

2 957481 386233
816
1256
2812
1370
1469
1439
33
929
1437
2680
1001
1846
1936
1161
1823
1417
2823
1753
2434
577
1671
676
174
2401
1762
123
785
604
1650
117
2344
1365
221
1096
1087
1057
457
2254
647
1827
266
1599
1445
83
2685
1372
1795
2595
1909
2605
1608
2656
1114
581
725
725
2964
1893
2997
2159
2457...

output:

243553
369562
36625
90220
62730
42787
241717
149359
268969
155264
320512
294338
253353
21209
383147
351989
377945
95957
11104
281882
322211
249147
314632
233795
328009
379666
87737
25996
373808
370185
100320
276912
381027
160702
232305
93658
378209
290139
141008
290287
259740
247075
57683
258680
366...

result:

ok 957481 numbers

Test #4:

score: 8
Accepted
time: 1746ms
memory: 8424kb

input:

2 912746 991287
2945
439
558
2022
1589
2495
2517
2291
2215
160
319
1671
2800
2008
2885
29
41
580
1156
2553
1876
1137
2129
2338
1046
1818
2691
1454
1229
1965
635
1516
987
1629
140
2320
1715
2644
452
1353
2755
693
956
2518
1154
2441
946
137
496
786
2489
1509
190
2177
1216
1725
480
2572
1774
2465
298
2...

output:

660858
612612
0
511632
911772
0
0
0
92378
55539
511632
0
0
0
479655
660858
939807
894102
95931
260865
699732
0
583110
496485
0
630819
0
90117
116622
804474
466488
816354
174933
450585
988218
623007
0
208692
0
0
330429
0
758043
660858
95931
660858
0
138321
148614
208692
0
692478
277134
127908
831402
...

result:

ok 912746 numbers

Subtask #3:

score: 12
Accepted

Test #5:

score: 12
Accepted
time: 29ms
memory: 20952kb

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: 301ms
memory: 26948kb

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: 1946ms
memory: 29404kb

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
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: 8
Accepted
time: 1ms
memory: 8024kb

input:

7 1 731039
314313205082038759

output:

0

result:

ok 1 number(s): "0"

Test #14:

score: 8
Accepted
time: 2ms
memory: 8040kb

input:

7 1 587945
675184352277027016

output:

0

result:

ok 1 number(s): "0"

Test #15:

score: 0
Wrong Answer
time: 6ms
memory: 9952kb

input:

7 1 732151
522404464427087971

output:

313779

result:

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

Subtask #8:

score: 0
Wrong Answer

Test #33:

score: 16
Accepted
time: 43ms
memory: 8040kb

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: 16
Accepted
time: 30ms
memory: 8080kb

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: 0
Wrong Answer
time: 262ms
memory: 8040kb

input:

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

output:

0
4894
0
0
0
4894
2447
0
0
2447
0
0
0
0
0
2447
2447
0
0
0
1875
0
0
0
0
0
0
2447
0
0
0
0
0
0
4894
0
0
0
2447
0
0
0
0
0
0
0
2447
0
4894
2447
0
0
0
0
0
0
0
0
0
0
0
4894
0
0
2447
4894
0
0
0
0
4894
0
4894
0
4894
0
0
4701
2447
0
0
0
0
4894
0
0
0
0
2447
0
0
0
0
0
2447
4894
0
2447
0
0
0
0
0
0
0
0
0
0
0
4894...

result:

wrong answer 2nd numbers differ - expected: '0', found: '4894'

Subtask #9:

score: 0
Skipped

Dependency #1:

100%
Accepted

Dependency #2:

100%
Accepted

Dependency #3:

100%
Accepted

Dependency #4:

100%
Accepted

Dependency #5:

100%
Accepted

Dependency #6:

0%