QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#225823 | #5402. 术树数 | chenxinyang2006 | 3 | 60ms | 27460kb | C++14 | 4.7kb | 2023-10-25 09:53:22 | 2023-10-25 09:53:22 |
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 mo(int x){
x %= k;
if(x < 0) x += k;
}
int sub(int x,int y){
int res = 0;
rep(i,0,m - 1){
res += P[i] * mo(x - y);
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: 2
Accepted
time: 0ms
memory: 11880kb
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: 2ms
memory: 9744kb
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: 9776kb
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 0 0 0 0 0 0 0
result:
wrong answer 2nd lines differ - expected: '256', found: '0'
Subtask #2:
score: 0
Skipped
Dependency #1:
0%
Subtask #3:
score: 0
Wrong Answer
Test #21:
score: 11
Accepted
time: 50ms
memory: 23852kb
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: 35ms
memory: 27460kb
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:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 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: '262729', found: '0'
Subtask #4:
score: 0
Wrong Answer
Test #26:
score: 0
Wrong Answer
time: 39ms
memory: 27072kb
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: 60ms
memory: 23568kb
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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 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: 3
Accepted
Test #33:
score: 3
Accepted
time: 10ms
memory: 24332kb
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: 41ms
memory: 27308kb
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%