QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#79989 | #5402. 术树数 | DCH233 | 3 | 995ms | 10416kb | C++14 | 3.5kb | 2023-02-21 16:16:07 | 2023-02-21 16:16:08 |
Judging History
answer
#include <cstdio>
#include <algorithm>
using namespace std;
namespace IO {
#define isdigit(x) (x >= '0' && x <= '9')
template<typename T>
inline void read(T &x) {
x = 0; char ch = getchar(); int f = 0;
for(; !isdigit(ch); ch = getchar()) if(ch == '-') f = 1;
for(; isdigit(ch); ch = getchar()) x = x * 10 + ch - '0';
if(f) x = -x;
}
template<typename T>
inline void write(T x) {
if(x < 0) putchar('-'), x = -x;
if(x > 9) write(x / 10);
putchar(x % 10 + '0');
}
#undef isdigit
}
using namespace IO;
const int N = 2e5 + 10;
const int M = 25;
int Q, k, m;
int bit[M];
inline int get(int x, int p) {
return x / bit[p] % k;
}
inline int add(int x, int y) {
int z = 0;
for(int i = 0; i < m; ++i) {
int u = get(x, i), v = get(y, i);
if((u += v) >= k) u -= k;
z += u * bit[i];
}
return z;
}
inline int red(int x, int y) {
int z = 0;
for(int i = 0; i < m; ++i) {
int u = get(x, i), v = get(y, i);
if((u -= v) < 0) u += k;
z += u * bit[i];
}
return z;
}
inline int mul(int x, int y) {
y %= k;
if(y < 0) y += k;
int z = 0;
for(int i = 0; i < m; ++i) {
int u = get(x, i);
u = u * y % k;
z += u * bit[i];
}
return z;
}
inline void out(int x) {
for(int i = m - 1; ~i; --i)
printf("%d",get(x,i));
puts("");
}
void exgcd(int a, int b, int &x, int &y) {
if(b == 0) x = 1, y = 0;
else exgcd(b, a % b, y, x), y -= a / b * x;
}
inline int kgcd(int x, int y, int p) {
int u = get(x, p), v = get(y, p);
if(v == 0) return x;
else return kgcd(y, red(x, mul(y, u / v)), p);
}
struct LinearBase {
int a[M];
inline void insert(int x) {
for(int i = m - 1; ~i; --i) {
int u = get(x, i);
if(u) {
if(!a[i]) {
int t1 = 0, t2 = 0;
exgcd(u, k, t1, t2);
a[i] = mul(x, t1);
x = mul(x, k / __gcd(k, u));
}
else {
if(u % get(a[i], i)) a[i] = kgcd(a[i], x, i);
x = red(x, mul(a[i], u / get(a[i], i)));
}
}
}
}
inline int query(int x) {
for(int i = m - 1; ~i; --i) {
int u = get(x, i);
if(u && a[i]) {
int v = get(a[i], i);
x = red(x, mul(a[i], u / v));
}
}
return x;
}
}base;
void init() {
bit[0] = 1;
for(int i = 1; i <= m - 1; ++i)
bit[i] = bit[i - 1] * k;
}
int dep[N], w[N];
int fa[N][18];
inline int lca(int x, int y) {
if(dep[x] < dep[y]) swap(x, y);
for(int i = 17; ~i; --i)
if(dep[fa[x][i]] >= dep[y])
x = fa[x][i];
if(x == y) return x;
for(int i = 17; ~i; --i)
if(fa[x][i] ^ fa[y][i])
x = fa[x][i], y = fa[y][i];
return fa[x][0];
}
int main() {
read(Q), read(k), read(m);
init();
int tot = 1;
for(int i = 1, op, x, y, v; i <= Q; ++i) {
read(op);
if(op == 1) {
read(x), read(v);
fa[++tot][0] = x;
for(int i = 1; i <= 17; ++i)
fa[tot][i] = fa[fa[tot][i - 1]][i - 1];
dep[tot] = dep[x] + 1;
w[tot] = add(w[x], v);
base.insert(mul(v, 2));
}
else if(op == 2) {
read(x), read(y), read(v);
int z = lca(x, y);
int len = red(add(w[x], w[y]), w[z]);
len = add(len, v);
base.insert(len);
}
else {
read(x), read(y);
int z = lca(x, y);
int len = red(add(w[x], w[y]), w[z]);
printf("%d\n",base.query(len));
}
}
return 0;
}
詳細信息
Subtask #1:
score: 0
Wrong Answer
Test #1:
score: 2
Accepted
time: 1ms
memory: 1444kb
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 0 0 0 0 0 0 0
result:
ok 12 lines
Test #2:
score: 0
Accepted
time: 1ms
memory: 1480kb
input:
30 9 3 1 1 694 1 2 251 1 2 623 2 2 4 109 3 3 4 3 1 2 2 2 4 611 1 4 595 2 2 5 477 2 2 5 363 3 1 3 2 1 5 121 1 2 225 2 1 5 214 2 3 6 706 3 3 4 2 2 3 122 2 2 3 621 3 2 3 3 2 4 2 1 5 630 1 5 598 3 4 5 3 1 3 1 2 665 2 1 2 331 2 1 6 449 1 2 387 3 3 6 3 4 6
output:
0 0 0 0 0 0 0 0 0 0
result:
ok 10 lines
Test #3:
score: -2
Wrong Answer
time: 1ms
memory: 1444kb
input:
30 4 5 1 1 854 1 1 467 1 2 708 2 2 4 529 1 4 115 1 4 444 2 3 4 108 2 2 5 724 2 1 3 375 1 5 827 2 5 6 974 1 3 73 3 2 3 2 2 3 140 3 5 6 2 6 8 787 3 1 5 1 5 971 3 4 6 2 4 5 816 3 7 8 3 2 4 1 6 855 2 5 10 39 2 6 9 280 2 6 10 662 3 7 10 1 6 412 3 4 7 1 6 276
output:
0 64 64 0 0 0 0 0
result:
wrong answer 2nd lines differ - expected: '256', found: '64'
Subtask #2:
score: 0
Skipped
Dependency #1:
0%
Subtask #3:
score: 0
Wrong Answer
Test #21:
score: 11
Accepted
time: 791ms
memory: 10416kb
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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 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 99662 lines
Test #22:
score: -11
Wrong Answer
time: 321ms
memory: 9644kb
input:
198073 8 8 1 1 4007183 1 1 411647 1 1 3301064 1 1 2747675 1 3 11141272 1 3 4308435 1 4 15582931 1 5 11340890 1 2 9172283 1 9 542280 1 10 12209796 1 3 2829956 3 1 3 1 3 724504 3 2 14 3 3 14 3 9 12 3 7 10 1 1 3594204 1 14 13600647 1 15 4589767 3 10 14 1 4 10564184 1 13 1781174 1 19 6067505 1 9 6735060...
output:
262729 2097224 262209 4673 2097672 2134081 2101769 2134080 0 2130432 584 2129992 2097737 2134024 2101824 2363904 295424 2359880 4608 2359369 295489 299593 1 2134017 2359305 262664 2130497 2101256 4161 294976 37440 2359361 299080 2363977 299592 33344 2392576 2359816 2359873 8 2359880 262657 0 2363464...
result:
wrong answer 3rd lines differ - expected: '520', found: '262209'
Subtask #4:
score: 0
Wrong Answer
Test #26:
score: 0
Wrong Answer
time: 62ms
memory: 7156kb
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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 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 33rd lines differ - expected: '13213440', found: '0'
Subtask #5:
score: 0
Wrong Answer
Test #30:
score: 0
Wrong Answer
time: 995ms
memory: 7796kb
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:
17880679 3831541 733545 2617123 2207964 2617123 880278 438986 257306 576472 109525 61295 102397 66323 82781 44411 102276 17558 66887 66887 0 83739 17240 17240 124168 67691 66798 9745 33204 20400 35690 50753 19350 50792 609 34061 1957 108 17261 201 1411 702 769 302 32 636 498 358 176 115 126 149 184 ...
result:
wrong answer 1st lines differ - expected: '150016', found: '17880679'
Subtask #6:
score: 3
Accepted
Test #33:
score: 3
Accepted
time: 19ms
memory: 2684kb
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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 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 16607 lines
Test #34:
score: 0
Accepted
time: 382ms
memory: 7704kb
input:
198392 7 9 1 1 23598910 3 1 2 1 1 25616681 2 1 2 22101090 2 2 3 25455751 3 1 2 3 1 2 1 3 25668120 3 1 3 1 3 23878180 1 4 10885281 1 1 5873751 2 2 7 31608236 3 2 3 3 3 5 2 2 6 37313936 2 1 6 36853293 2 4 7 6773989 2 1 7 19143946 3 2 7 3 3 7 3 1 2 1 1 31756932 3 3 6 2 5 8 39585364 1 2 27162269 3 4 5 2...
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:
ok 65758 lines
Subtask #7:
score: 0
Skipped
Dependency #1:
0%