QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#212909#5402. 术树数complexor15 199ms22420kbC++143.2kb2023-10-13 22:40:242023-10-13 22:40:25

Judging History

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

  • [2023-10-13 22:40:25]
  • 评测
  • 测评结果:15
  • 用时:199ms
  • 内存:22420kb
  • [2023-10-13 22:40:24]
  • 提交

answer

#include <cstdio>
#include <algorithm>
#include <numeric>
#include <cstring>
#include <queue>
typedef long long LL;
typedef unsigned long long ULL;
typedef std::pair<int, int> pii;
#define MP std::make_pair
#define fi first
#define se second
#define clr(f, n) memset(f, 0, (n) << 2)
#define cpy(f, g, n) memcpy(f, g, (n) << 2)
int read()
{
	int s = 0, f = 1;
	char c = getchar();
	while (!(c >= '0' && c <= '9'))
		f ^= (c == '-'), c = getchar();
	while (c >= '0' && c <= '9')
		s = s * 10 + (c ^ 48), c = getchar();
	return f ? s : -s;
}
const int MAXN = 200005, MAXD = 30;
int Q, K, m, n = 1;
auto fplus = [](int x, int y){ return x + y >= K ? x + y - K : x + y; };
auto fminus = [](int x, int y){ return x >= y ? x - y : x + K - y; };
auto Fplus = [](int &x, int y){ return x = fplus(x, y); };
auto Fminus = [](int &x, int y){ return x = fminus(x, y); };
void swap(int a[], int b[], int n)
{
	for (int i = 0; i < n; i++)
		std::swap(a[i], b[i]);
}
int exgcd(int x, int y, LL &a, LL &b)
{
	if (!y) return a = 1, b = 0, x;
	int d = exgcd(y, x % y, b, a);
	b -= a * (x / y);
	return d;
}
int gcd(int x, int y)
{
	for (; y; std::swap(x, y)) x /= y;
	return x;
}
struct Linear_Base
{
	int p[MAXD][MAXD];
	void insert(int v[])
	{
		for (int i = m - 1; i >= 0; i--)
			if (v[i])
				while (v[i])
				{
					for (int j = 0; j <= i; j++)
						Fminus(p[i][j], (LL)(p[i][i] / v[i]) * v[j] % K);
					swap(p[i], v, i + 1);
				}
	}
	void query(int v[])
	{
		for (int i = m - 1; i >= 0; i--)
			if (v[i] && p[i][i])
			{
				int g = gcd(v[i], K);
				int c = (K - v[i] + g - 1) / g;
				LL a, b; exgcd(p[i][i], K, a, b);
				a = (K + c * a % K) % K;
				for (int j = 0; j <= i; j++)
					v[j] = (a * p[i][j] + v[j]) % K;
			}
	}
} lb;
int anc[MAXN][19], val[MAXN][MAXD], dep[MAXN];
int tmp[MAXD], tm[MAXD];
int getLca(int x, int y)
{
	if (dep[x] < dep[y]) std::swap(x, y);
	int dif = dep[x] - dep[y];
	for (int i = 0; i <= 18; i++, dif >>= 1)
		if (dif & 1) x = anc[x][i];
	if (x == y) return x;
	for (int i = 18; i >= 0; i--)
		if (anc[x][i] != anc[y][i])
			x = anc[x][i], y = anc[y][i];
	return anc[x][0];
}
void calc(int f[], int v)
{
	clr(f, m);
	for (int i = 0; v; v /= K, i++)
		f[i] = v % K;
}
void pplus(int f[], int g[])
{
	for (int i = 0; i < m; i++)
		Fplus(f[i], g[i]);
}
int calc(int f[])
{
	int v = 0;
	for (int i = 0, j = 1; i < m; i++, j *= K)
		v += f[i] * j;
	return v;
}
int main()
{
	Q = read(), K = read(), m = read();
	for (int _ = 1; _ <= Q; _++)
	{
		int o = read(), x = read(), y = read();
		if (o == 1)
		{
			anc[++n][0] = x, dep[n] = dep[x] + 1;
			for (int i = 1; i <= 18; i++)
				anc[n][i] = anc[anc[n][i - 1]][i - 1];
			calc(tmp, y), cpy(val[n], tmp, m), pplus(val[n], val[x]);
			for (int i = 0; i < m; i++) Fplus(tmp[i], tmp[i]);
			lb.insert(tmp);
		}
		else if (o == 2)
		{
			calc(tmp, read());
			for (int i = 0; i < m; i++) tm[i] = fplus(tmp[i], tmp[i]);
			lb.insert(tm);
			for (int i = 0; i < m; i++)
				Fplus(tmp[i], fplus(val[x][i], val[y][i]));
			lb.insert(tmp);
		}
		else
		{
			for (int i = 0; i < m; i++)
				tmp[i] = fplus(val[x][i], val[y][i]);
			lb.query(tmp);
			printf("%d\n", calc(tmp));
		}
	}
	return 0;
}

详细

Subtask #1:

score: 0
Wrong Answer

Test #1:

score: 0
Wrong Answer
time: 0ms
memory: 3556kb

input:

30 7 3
1 1 301
1 1 236
1 2 278
3 2 4
3 2 4
2 1 4 265
1 1 242
1 4 278
1 6 337
3 2 3
2 5 7 304
2 5 6 34
1 4 178
3 6 7
3 5 7
3 1 4
1 1 178
3 3 4
3 1 6
3 3 4
2 6 7 131
1 1 213
3 1 3
2 3 10 11
3 4 6
2 5 9 169
1 6 9
2 5 10 29
1 9 111
3 9 11

output:

217
217
235
210
336
278
115
152
115
266
16
341

result:

wrong answer 1st lines differ - expected: '0', found: '217'

Subtask #2:

score: 0
Skipped

Dependency #1:

0%

Subtask #3:

score: 0
Wrong Answer

Test #21:

score: 0
Wrong Answer
time: 199ms
memory: 22420kb

input:

198517 3 16
1 1 40710744
1 2 21885097
1 1 23592366
1 4 7387074
1 5 16074177
1 1 41027400
1 4 18082971
1 2 12822448
1 1 2286557
1 1 27896295
1 11 14532760
1 8 2357296
1 11 9190559
1 6 40503152
3 4 11
3 1 7
3 3 7
3 8 14
3 12 15
3 2 3
1 10 34606866
1 13 42718465
1 16 30353561
3 5 11
3 2 6
3 16 18
1 3 2...

output:

9566012
1082014
1067276
13980771
3311120
355759
10051512
38736308
369060
3663038
161844
120102
3562062
3365280
12754608
38620008
13279470
3322032
3189132
42687324
38282760
158978
32953896
29931930
32953718
39370596
1063428
38425806
28703652
32043978
38622438
360126
1119798
29760722
10983134
13980006...

result:

wrong answer 1st lines differ - expected: '0', found: '9566012'

Subtask #4:

score: 0
Wrong Answer

Test #26:

score: 0
Wrong Answer
time: 20ms
memory: 16332kb

input:

198891 26426880 1
1 1 0
2 1 2 0
3 1 2
1 1 0
3 2 3
3 1 2
1 2 0
1 2 0
1 3 0
1 6 0
2 1 6 0
2 3 6 0
3 2 3
1 2 13213440
1 2 13213440
1 4 13213440
3 4 10
1 1 13213440
2 3 4 0
2 3 8 13213440
1 1 0
1 12 0
1 13 0
1 3 0
3 2 11
3 2 12
2 11 14 13213440
1 6 0
2 12 14 0
2 1 2 0
1 10 0
1 12 0
2 3 13 0
3 12 14
3 1 ...

output:

0
0
0
0
13213440
13213440
0
0
0
13213440
0
0
13213440
0
13213440
0
13213440
0
13213440
13213440
13213440
13213440
13213440
0
13213440
13213440
0
13213440
13213440
0
0
0
13213440
0
13213440
0
13213440
0
0
0
13213440
13213440
0
13213440
13213440
13213440
13213440
0
13213440
13213440
13213440
13213440
...

result:

wrong answer 520th lines differ - expected: '1468160', found: '16149760'

Subtask #5:

score: 15
Accepted

Test #30:

score: 15
Accepted
time: 150ms
memory: 16976kb

input:

199458 2 25
1 1 31252443
2 1 2 22827339
1 2 13517756
1 2 5635412
1 3 33397078
1 3 33542998
2 3 5 1484991
3 5 6
2 1 3 7938846
2 1 2 3665458
1 3 29150948
3 4 5
1 3 733545
1 7 4698781
1 7 21699192
1 6 10854390
3 3 8
3 4 8
1 2 6889338
2 1 12 27646676
2 6 8 24407215
1 11 20847453
3 4 13
1 6 16891344
3 4 ...

output:

150016
891079
733545
1048849
7306736
7012
6336311
7310241
705870
794721
112806
777734
2522042
203310
370916
2339461
699806
747148
597151
969956
2633367
376785
884917
884917
331441
2696956
2423527
2304668
2457533
2783258
690228
864462
360811
124716
2098167
48248
2869827
605003
235881
2739062
2861794
...

result:

ok 66461 lines

Test #31:

score: 0
Accepted
time: 149ms
memory: 19220kb

input:

198986 2 25
1 1 11331234
1 2 24833898
2 1 3 10628416
3 2 3
1 3 6115878
2 2 4 23717273
1 3 18406568
2 2 4 1949969
1 4 6063130
1 6 25760596
3 1 2
3 5 7
3 5 6
3 2 6
3 1 7
1 6 31753825
3 1 4
2 3 4 6115878
3 2 6
2 3 5 22447229
3 1 3
2 3 4 6115878
2 4 7 1813362
3 2 4
2 1 8 8192320
3 3 5
1 7 114729
1 9 188...

output:

969698
11331234
9443776
2324169
990686
1086581
11610035
990686
10628416
1949969
2269429
1949969
571284
3254790
682010
502346
824812
623366
377762
377762
2376509
884877
2316090
2244147
665245
341785
922389
928237
744294
69811
404242
789948
620664
513259
317968
222762
169970
969698
12365
1046658
91964...

result:

ok 65927 lines

Test #32:

score: 0
Accepted
time: 147ms
memory: 19152kb

input:

198119 2 25
1 1 1988220
2 1 2 10935842
2 1 2 10935842
3 1 2
1 2 9175257
2 1 2 30426983
1 3 21520990
1 2 7244347
2 3 5 19700729
1 3 24753647
3 4 6
2 1 2 30426983
3 2 4
1 6 25686082
2 1 6 22244116
1 7 20608501
3 3 6
1 2 29561714
2 2 3 21107138
1 1 21122181
1 6 7460982
2 7 9 19503627
1 9 8058976
3 1 8
...

output:

1988220
3266481
684956
994474
48107
1167209
4443137
4685362
1360512
4639448
238700
348592
278885
295451
489693
344667
180320
328346
407326
454344
485048
139415
148539
301162
209675
136220
454344
201497
48475
346271
411773
397728
487925
400145
418154
120548
273314
523155
476405
141994
243836
128983
7...

result:

ok 65949 lines

Subtask #6:

score: 0
Wrong Answer

Test #33:

score: 0
Wrong Answer
time: 4ms
memory: 6236kb

input:

49958 1023 2
1 1 122428
1 1 917186
2 2 3 53148
1 3 876461
2 1 3 968146
2 2 4 569341
2 3 4 199413
2 1 4 238371
1 3 127427
1 2 887225
2 1 4 776059
2 4 6 155479
2 1 6 795533
1 5 159578
3 5 6
2 2 5 758778
2 5 6 601115
3 4 7
1 4 202224
2 5 6 902346
3 1 6
3 5 7
3 3 5
1 2 791251
1 5 502214
2 6 7 929048
1 6...

output:

1006665
902685
1010627
153651
915221
399993
918160
697069
857773
198792
901833
733429
674425
35703
748842
369883
369883
496724
532591
223625
414019
666959
983563
24169
747069
364036
411172
758914
736368
717362
609394
88496
331789
136939
628093
681628
995066
922268
179255
209879
915221
1029445
495868...

result:

wrong answer 1st lines differ - expected: '0', found: '1006665'

Subtask #7:

score: 0
Skipped

Dependency #1:

0%