QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#225822 | #5402. 术树数 | chenxinyang2006 | 15 | 246ms | 27328kb | C++14 | 4.7kb | 2023-10-25 09:52:14 | 2023-10-25 09:52:14 |
Judging History
answer
#include <bits/stdc++.h>
#define rep(i,j,k) for(int i=(j);i<=(k);i++)
#define per(i,j,k) for(int i=(j);i>=(k);i--)
#define uint unsigned int
#define ll long long
#define ull unsigned long long
#define db double
#define ldb long double
#define pii pair<int,int>
#define pll pair<ll,ll>
#define mkp make_pair
#define eb emplace_back
#define SZ(S) (int)S.size()
//#define mod 998244353
//#define mod 1000000007
#define inf 0x3f3f3f3f
#define linf 0x3f3f3f3f3f3f3f3f
using namespace std;
template <class T>
void chkmax(T &x,T y){
if(x < y) x = y;
}
template <class T>
void chkmin(T &x,T y){
if(x > y) x = y;
}
inline int popcnt(int x){
return __builtin_popcount(x);
}
inline int ctz(int x){
return __builtin_ctz(x);
}
/*ll power(ll p,int k = mod - 2){
ll ans = 1;
while(k){
if(k % 2 == 1) ans = ans * p % mod;
p = p * p % mod;
k /= 2;
}
return ans;
}*/
int n,Q,k,m;
int opt[200005],_x[200005],_y[200005],_w[200005];
int cnt;
int head[200005];
struct eg{
int to,nxt,w;
}edge[200005];
void make(int u,int v,int w){
edge[++cnt].to = v;
edge[cnt].w = w;
edge[cnt].nxt = head[u];
head[u] = cnt;
}
ll P[35];
int add(int x,int y){
int res = 0;
rep(i,0,m - 1){
res += P[i] * ((x + y) % k);
x /= k;y /= k;
}
return res;
}
int sub(int x,int y){
int res = 0;
rep(i,0,m - 1){
res += P[i] * ((x - y + k) % k);
x /= k;y /= k;
}
return res;
}
int sum[200005],fa[200005],dep[200005],dfn[200005];
int ST[20][200005];
void dfs(int u){
dep[u] = dep[fa[u]] + 1;
dfn[u] = ++cnt;
for(int i = head[u];i;i = edge[i].nxt){
int v = edge[i].to;
sum[v] = add(sum[u],edge[i].w);
dfs(v);
}
}
inline int cmp(int x,int y){
if(dep[x] < dep[y]) return x;
return y;
}
inline int qry(int l,int r){
int x = __lg(r - l + 1);
return cmp(ST[x][l],ST[x][r - (1 << x) + 1]);
}
inline int LCA(int u,int v){
if(u == v) return u;
u = dfn[u];v = dfn[v];
if(u > v) swap(u,v);
return fa[qry(u + 1,v)];
}
int getdis(int u,int v){
int d = LCA(u,v);
return sub(sub(add(sum[u],sum[v]),sum[d]),sum[d]);
}
ll w[35][35];
int exgcd(int a,int b,int &x0,int &y0){
if(!b){
x0 = 1;
y0 = 0;
return a;
}
int x1,y1;
int d = exgcd(b,a % b,x1,y1);
x0 = y1;
y0 = x1 - (a / b) * y1;
return d;
}
int getinv(int a,int b){
int p,q;
// printf("getinv %d %d ",a,b);
assert(exgcd(a,b,p,q) == 1);
p %= b;
if(p < 0) p += b;
// printf("%d\n",p);
return p;
}
void insert(int val){
// printf("insert %d\n",val);
ll cur[35];
rep(i,0,m - 1){
cur[i] = val % k;
val /= k;
}
reverse(cur,cur + m);
// rep(i,0,m - 1) printf("%lld ",cur[i]);
// printf("\n");
int d;
ll r,temp;
rep(i,0,m - 1){
if(!cur[i]) continue;
if(!w[i][i] || cur[i] % w[i][i]){//击败事件
d = __gcd(cur[i],1ll * k);
// printf("d=%d ",d);
r = getinv(cur[i] / d,k / d);
rep(j,0,m - 1) cur[j] = cur[j] * r % k;
rep(j,0,m - 1) swap(cur[j],w[i][j]);
r = k / w[i][i];
temp = 0;
rep(j,0,m - 1) temp += (r * w[i][j] % k) * P[j];
insert(temp);
}
assert(w[i][i]);
r = cur[i] / w[i][i];
rep(j,0,m - 1){
cur[j] = (cur[j] - r * w[i][j]) % k;
if(cur[j] < 0) cur[j] += k;
}
}
// printf("fin\n");
}
int query(int val){
// printf("query %d\n",val);
ll cur[35];
rep(i,0,m - 1){
cur[i] = val % k;
val /= k;
}
reverse(cur,cur + m);
/* rep(i,0,m - 1) printf("%lld ",cur[i]);
printf("\n");
rep(i,0,m - 1){
rep(j,0,m - 1) printf("%lld ",w[i][j]);
printf("\n");
}
printf("\n");*/
rep(i,0,m - 1){
if(!w[i][i]) continue;
ll r = cur[i] / w[i][i];
rep(j,0,m - 1){
cur[j] = (cur[j] - r * w[i][j]) % k;
if(cur[j] < 0) cur[j] += k;
}
// printf("pos %d\n",i);
// rep(j,0,m - 1) printf("%lld ",cur[j]);
// printf("\n");
}
reverse(cur,cur + m);
ll res = 0;
rep(i,0,m - 1) res += cur[i] * P[i];
// printf("%lld\n",res);
return res;
}
int main(){
// freopen("test.in","r",stdin);
scanf("%d%d%d",&Q,&k,&m);
P[0] = 1;
rep(i,1,m - 1) P[i] = P[i - 1] * k;
n = 1;
int _q = 1;
rep(i,1,Q){
scanf("%d%d",&opt[_q],&_x[_q]);
if(opt[_q] == 1){
scanf("%d",&_w[_q]);
++n;
fa[n] = _x[_q];
make(_x[_q],n,_w[_q]);
continue;
}
scanf("%d",&_y[_q]);
if(opt[_q] == 2) scanf("%d",&_w[_q]);
_q++;
}
Q = _q - 1;
// rep(i,1,Q) printf("%d %d %d %d\n",opt[i],_x[i],_y[i],_w[i]);
cnt = 0;
dfs(1);
rep(i,1,17){
rep(j,1,n){
if(j + (1 << i) - 1 > n) break;
ST[i][j] = cmp(ST[i - 1][j],ST[i - 1][j + (1 << (i - 1))]);
}
}
rep(i,1,Q){
if(opt[i] == 2){
insert(add(getdis(_x[i],_y[i]),_w[i]));
}else{
printf("%d\n",query(getdis(_x[i],_y[i])));
}
}
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: 15912kb
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:
194 194 48 6 5 3 6 0 6 0 0 0
result:
wrong answer 1st lines differ - expected: '0', found: '194'
Subtask #2:
score: 0
Skipped
Dependency #1:
0%
Subtask #3:
score: 0
Wrong Answer
Test #21:
score: 0
Wrong Answer
time: 77ms
memory: 24140kb
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:
30755577 41027400 39582697 8340359 3050820 39285481 37425315 23086806 9649050 38887442 41481251 1208788 10156983 42428974 30755577 17569350 31124395 11031939 41481251 15243134 17265782 35552431 27932043 23429493 19946491 18751764 39085610 17902860 20910089 24111201 23637434 29216544 12334806 1726578...
result:
wrong answer 1st lines differ - expected: '0', found: '30755577'
Subtask #4:
score: 0
Wrong Answer
Test #26:
score: 0
Wrong Answer
time: 42ms
memory: 25584kb
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 2629th lines differ - expected: '0', found: '634880'
Subtask #5:
score: 15
Accepted
Test #30:
score: 15
Accepted
time: 238ms
memory: 25352kb
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: 236ms
memory: 27152kb
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: 246ms
memory: 27328kb
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: 3
Accepted
time: 12ms
memory: 24616kb
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
Wrong Answer
time: 106ms
memory: 23756kb
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:
23598910 736310 736310 676839 477709 473075 6 27 42 33 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 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: '0', found: '23598910'
Subtask #7:
score: 0
Skipped
Dependency #1:
0%