QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#212909 | #5402. 术树数 | complexor | 15 | 199ms | 22420kb | C++14 | 3.2kb | 2023-10-13 22:40:24 | 2023-10-13 22:40:25 |
Judging History
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;
}
Details
Tip: Click on the bar to expand more detailed information
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%