QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#212919#5402. 术树数complexor0 146ms3584kbC++143.3kb2023-10-13 22:54:502023-10-13 22:54:51

Judging History

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

  • [2023-10-13 22:54:51]
  • 评测
  • 测评结果:0
  • 用时:146ms
  • 内存:3584kb
  • [2023-10-13 22:54:50]
  • 提交

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_Basis
{
	int p[MAXD][MAXD];
	void insert(int v[])
	{
		for (int i = m - 1; i >= 0; i--)
			if (v[i])
			{
				if (!p[i][i])
				{
					cpy(p[i], v, i + 1);
					int d = (K, v[i]);
					for (int j = 0; j <= i; j++)
						v[j] = (LL)v[j] * (K / d) % K;
				}
				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(p[i][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)
		{
			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: 1536kb

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:

0
0
0
0
0
220
0
6
0
112
0
0

result:

wrong answer 6th lines differ - expected: '0', found: '220'

Subtask #2:

score: 0
Skipped

Dependency #1:

0%

Subtask #3:

score: 0
Wrong Answer

Test #21:

score: 0
Wrong Answer
time: 146ms
memory: 3584kb

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:

0
0
0
0
0
0
0
0
0
0
0
0
0
43031414
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
0
12795650
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
...

result:

wrong answer 14th lines differ - expected: '0', found: '43031414'

Subtask #4:

score: 0
Wrong Answer

Test #26:

score: 0
Wrong Answer
time: 14ms
memory: 1520kb

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
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
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
...

result:

wrong answer 5th lines differ - expected: '13213440', found: '0'

Subtask #5:

score: 0
Wrong Answer

Test #30:

score: 0
Wrong Answer
time: 135ms
memory: 1508kb

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:

0
0
0
0
0
0
0
44405
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
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
...

result:

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

Subtask #6:

score: 0
Wrong Answer

Test #33:

score: 0
Wrong Answer
time: 7ms
memory: 3540kb

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:

0
0
203198
0
0
0
774267
0
0
0
0
0
0
440341
0
0
0
0
0
0
0
0
0
0
97265
0
0
0
390005
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
370771
0
0
0
0
59926
0
0
0
0
143914
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
...

result:

wrong answer 3rd lines differ - expected: '0', found: '203198'

Subtask #7:

score: 0
Skipped

Dependency #1:

0%