QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#89898#5110. Splitstream_skb_#RE 4ms3496kbC++142.2kb2023-03-21 18:43:052023-03-21 18:43:05

Judging History

你现在查看的是最新测评结果

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-03-21 18:43:05]
  • 评测
  • 测评结果:RE
  • 用时:4ms
  • 内存:3496kb
  • [2023-03-21 18:43:05]
  • 提交

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";
    }



}

Details

Tip: Click on the bar to expand more detailed information

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...

output:


result: