QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#560113 | #5402. 术树数 | Flamire | 18 | 619ms | 376908kb | C++17 | 3.0kb | 2024-09-12 12:43:53 | 2024-09-12 12:43:53 |
Judging History
answer
#include <bits/stdc++.h>
#define pii pair<int,int>
#define s1 first
#define s2 second
#define N 200011
using namespace std;
int q,k,m,n,pw[55];
struct num{int a[26];num(){memset(a,0,sizeof(a));}num(int _x){for(int i=0;i<m;++i)a[i]=_x/pw[i]%k;}int& operator[](int x){return a[x];}};
num operator+(num a,num b){num c;for(int i=0;i<m;++i)c[i]=(a[i]+b[i])%k;return c;}
num operator-(num a,num b){num c;for(int i=0;i<m;++i)c[i]=(a[i]+k-b[i])%k;return c;}
num operator*(num a,int v){num c;for(int i=0;i<m;++i)c[i]=1ll*a[i]*v%k;return c;}
num operator*(int v,num a){num c;for(int i=0;i<m;++i)c[i]=1ll*a[i]*v%k;return c;}
int fa[N][18],dep[N];num faw[N][18];
num bs[55];
pair<num,num> red(num a,num b,int id)
{
if(!b[id])return {a,b};
return red(b,a-(a[id]/b[id])*b,id);
}
void ins(num x)
{//printf("ins(");for(int i=0;i<m;++i)printf("%d ",x.a[i]);printf(")\n");
for(int i=m-1;~i;--i)if(x[i])
{
if(bs[i][i])
{
auto tt=red(bs[i],x,i);
int g=gcd(bs[i][i],x[i]);
x=bs[i]*(x[i]/g)+x*(bs[i][i]/g);
}
else
{
bs[i]=x;
int yy=k/gcd(x[i],k);
// printf("yy:%d\n",yy);
x=x*yy;
}
}
}
num query(int x,int y)
{
if(dep[x]<dep[y])swap(x,y);
num ans;
for(int i=17;~i;--i)if(dep[x]-(1<<i)>=dep[y])ans=ans+faw[x][i],x=fa[x][i];if(x==y)return ans;
for(int i=17;~i;--i)if(fa[x][i]^fa[y][i])ans=ans+faw[x][i]+faw[y][i],x=fa[x][i],y=fa[y][i];return ans+faw[x][0]+faw[y][0];
}
int gcd(int a,int b){return !b?a:gcd(b,a%b);}
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;
}
num search(num x)
{
// printf("search(");for(int i=m-1;~i;--i)printf("%d ",x[i]);printf(")\n");
// printf("bs:\n");
// for(int i=m-1;~i;--i)
// {
// for(int j=m-1;~j;--j)printf("%d ",bs[i][j]);putchar(10);
// }
for(int i=m-1;~i;--i)if(bs[i][i])
{
int g=gcd(k,bs[i][i]);
int y=x[i]%g;//printf("i:%d g:%d y:%d\n",i,g,y);
int kk,t;
exgcd(bs[i][i],k,kk,t);
kk=((kk*(y-x[i])/g)%k+k)%k;
// printf("kk:%d\n",kk);
x=x+kk*bs[i];
}
// printf("fin x:");for(int i=m-1;~i;--i)printf("%d ",x[i]);putchar(10);
return x;
}
int main()
{
scanf("%d%d%d",&q,&k,&m);
pw[0]=1;for(int i=1;i<=m;++i)pw[i]=pw[i-1]*k;
n=1;
for(int i=1;i<=q;++i)
{//printf("------------------------------------------\n");
int cmd,x,y;
scanf("%d%d%d",&cmd,&x,&y);
if(cmd==1)
{
++n;
fa[n][0]=x;faw[n][0]=y;dep[n]=dep[x]+1;
for(int i=1;i<=17;++i)fa[n][i]=fa[fa[n][i-1]][i-1],faw[n][i]=faw[n][i-1]+faw[fa[n][i-1]][i-1];
// for(int i=0;(1<<i)<dep[n];++i)
// {
// printf("faw[%d]:",i);for(int j=0;j<m;++j)printf("%d ",faw[n][i][j]);putchar(10);
// }
ins((num)y+(num)y);
}
else if(cmd==2)
{
int v;scanf("%d",&v);
ins(query(x,y)+v);
}
else
{
if(k%2==1)printf("0\n");
else
{
num val=query(x,y);
// printf("val:");for(int i=0;i<m;++i)printf("%d ",val[i]);putchar(10);
num ans=search(query(x,y));
int h=0;
for(int i=0;i<m;++i)h+=pw[i]*ans[i];
printf("%d\n",h);
}
}
}
fclose(stdin);fclose(stdout);return 0;
}
詳細信息
Subtask #1:
score: 0
Wrong Answer
Test #1:
score: 2
Accepted
time: 47ms
memory: 369388kb
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: 2
Accepted
time: 44ms
memory: 369460kb
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: 0
Wrong Answer
time: 47ms
memory: 369548kb
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:
5 325 321 276 320 68 257 320
result:
wrong answer 1st lines differ - expected: '0', found: '5'
Subtask #2:
score: 0
Skipped
Dependency #1:
0%
Subtask #3:
score: 0
Wrong Answer
Test #21:
score: 11
Accepted
time: 410ms
memory: 376792kb
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: 0
Wrong Answer
time: 347ms
memory: 376908kb
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:
272203 10487130 74522 9516883 3154440 10589267 2175515 10597714 3224410 10584592 8455002 11576666 3441416 2134024 10564434 10819074 8693250 1152256 4866 9502736 1410625 9737033 8211 9545545 11863049 11577112 2131777 2373185 9442387 8683840 102994 2367553 307530 10564864 8753992 9536322 2467602 34168...
result:
wrong answer 1st lines differ - expected: '262729', found: '272203'
Subtask #4:
score: 0
Wrong Answer
Test #26:
score: 0
Wrong Answer
time: 196ms
memory: 374340kb
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 2628th lines differ - expected: '39680', found: '1468160'
Subtask #5:
score: 15
Accepted
Test #30:
score: 15
Accepted
time: 608ms
memory: 374480kb
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: 15
Accepted
time: 600ms
memory: 374476kb
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: 15
Accepted
time: 619ms
memory: 374292kb
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: 3
Accepted
Test #33:
score: 3
Accepted
time: 95ms
memory: 370716kb
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: 3
Accepted
time: 383ms
memory: 374344kb
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%