QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#89898 | #5110. Splitstream | _skb_# | RE | 4ms | 3496kb | C++14 | 2.2kb | 2023-03-21 18:43:05 | 2023-03-21 18:43:05 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
#define ll long long
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
ll n,q,m;
cin>>m>>n>>q;
vector<ll> sz(4*n+1,0);
vector<pair<int,int>> par(4*n+1,{-1,-1});
sz[1]=m;
for(int i=0;i<n;i++){
char p;
int x,y,z;
cin>>p>>x>>y>>z;
if(p=='S'){
par[y]={x,-1};
par[z]={-1,x};
assert(x<y);
assert(x<z);
}
else {
par[z]={x,y};
assert(z>x);
assert(z>y);
}
}
for(int i=2;i<4*n;i++){
if(par[i]==make_pair(-1,-1)) break;
int x=par[i].first;
int y=par[i].second;
if(x==-1) sz[i]=sz[y]/2;
else if(y==-1) sz[i]=(sz[x]+1)/2;
else sz[i]=sz[x]+sz[y];
}
while(q--){
ll u,k;
cin>>u>>k;
int f=1;
while(u!=1){
int x=par[u].first;
int y=par[u].second;
if(k>sz[u]){
f=0;
break;
}
if(x==-1){
u=y;
k=2LL*k;
}
else if(y==-1){
u=x;
k=2LL*k-1LL;
}
else{
ll a=sz[x];
ll b=sz[y];
if(k>a+b){
f=0;
break;
}
if(a>=b){
if(k<=2LL*b){
if(k%2) u=x;
else u=y;
k=(k+1LL)/2;
}
else{
u=x;
k=k-b;
}
}
else{
if(k<=2LL*a){
if(k%2) u=x;
else u=y;
k=(k+1LL)/2;
}
else{
u=y;
k=k-a;
}
}
}
}
if(k>m) f=0;
if(!f) cout<<"none\n";
else cout<<k<<"\n";
}
}
详细
Test #1:
score: 100
Accepted
time: 2ms
memory: 3360kb
input:
5 8 26 M 8 9 13 S 2 4 5 S 1 2 3 M 6 5 8 S 4 9 10 S 10 14 15 S 3 6 7 S 7 11 12 2 3 2 4 3 2 3 3 4 2 4 3 5 1 5 2 6 1 6 2 7 1 7 2 8 2 8 3 9 1 9 2 10 1 10 2 11 1 11 2 12 1 13 3 13 4 14 1 14 2 15 1
output:
5 none 4 none 5 none 3 none 2 none 4 none 3 none 1 none 5 none 4 none none 3 none 5 none none
result:
ok 26 lines
Test #2:
score: 0
Accepted
time: 4ms
memory: 3496kb
input:
1000000000 8191 1000 S 1 2 3 S 2 4 5 S 3 6 7 S 4 8 9 S 5 10 11 S 6 12 13 S 7 14 15 S 8 16 17 S 9 18 19 S 10 20 21 S 11 22 23 S 12 24 25 S 13 26 27 S 14 28 29 S 15 30 31 S 16 32 33 S 17 34 35 S 18 36 37 S 19 38 39 S 20 40 41 S 21 42 43 S 22 44 45 S 23 46 47 S 24 48 49 S 25 50 51 S 26 52 53 S 27 54 55...
output:
1 3 999999999 499999999 333333331 999999997 499999997 333333329 2 4 1000000000 500000000 333333332 999999998 499999998 333333330 1 5 999999997 499999997 333333329 999999993 499999993 333333325 3 7 999999999 499999999 333333331 999999995 499999995 333333327 2 6 999999998 499999998 333333330 999999994...
result:
ok 1000 lines
Test #3:
score: -100
Dangerous Syscalls
input:
1000000000 8190 1000 S 1 2 3 M 8193 8194 8192 S 2 4 5 M 8195 8196 8193 S 3 6 7 M 8197 8198 8194 S 4 8 9 M 8199 8200 8195 S 5 10 11 M 8201 8202 8196 S 6 12 13 M 8203 8204 8197 S 7 14 15 M 8205 8206 8198 S 8 16 17 M 8207 8208 8199 S 9 18 19 M 8209 8210 8200 S 10 20 21 M 8211 8212 8201 S 11 22 23 M 821...