QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#536578#5110. SplitstreamRngBased#WA 2ms8068kbC++202.3kb2024-08-29 14:46:222024-08-29 14:46:23

Judging History

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

  • [2024-08-29 14:46:23]
  • 评测
  • 测评结果:WA
  • 用时:2ms
  • 内存:8068kb
  • [2024-08-29 14:46:22]
  • 提交

answer

#include <bits/stdc++.h>
#define ll long long
#define pii pair<int, int>
#define pll pair<ll, ll>
#define pdd pair<double, double>
#define F first
#define S second
#define all(x) x.begin(), x.end()
#define N 200015
using namespace std;
int n, m, q, fa1[N], fa2[N], son1[N], son2[N], type_down[N], type_up[N], sz[N];
void dfs(int p){
    if (!type_down[p])
        return;
    if (type_down[p] == 1){
        sz[son1[p]] = (sz[p] + 1) / 2;
        sz[son2[p]] = sz[p] / 2;
        dfs(son1[p]), dfs(son2[p]);
    }
    else {
        int nxt = son1[p];
        if (sz[fa1[nxt]] == 0 || sz[fa2[nxt]] == 0)
            return;
        sz[nxt] = sz[fa1[nxt]] + sz[fa2[nxt]];
        dfs(nxt);
    }
}
signed main()
{
    ios::sync_with_stdio(0);
    cin.tie(0), cout.tie(0);
    cin >> m >> n >> q;
    for (int i = 1; i <= n; i++){
        char c;
        int x, y, z;
        cin >> c >> x >> y >> z;
        if (c == 'S'){
            son1[x] = y, son2[x] = z;
            fa1[y] = x, fa1[z] = x;
            type_down[x] = 1, type_up[y] = 2, type_up[z] = 3; 
        }
        else {
            son1[x] = z, son1[y] = z;
            fa1[z] = x, fa2[z] = y;
            type_down[x] = 2, type_down[y] = 2, type_up[z] = 1; 
        }
    }
    sz[1] = m, dfs(1);
    while (q--){
        ll x, k; cin >> x >> k;
        if (k > sz[x]){
            cout << "none\n";
            continue;
        }
        while (x != 1){
            if (type_up[x] == 1){
                int sz1 = sz[fa1[x]], sz2 = sz[fa2[x]];
                if (min(sz1, sz2) * 2 >= k){
                    if (k % 2)
                        x = fa1[x], k = (k + 1) / 2;
                    else x = fa2[x], k = k / 2;
                }
                else if (sz1 > sz2){
                    x = fa1[x];
                    k = (k - sz2);
                }
                else {
                    x = fa2[x];
                    k = (k - sz1);
                }
            }
            else if (type_up[x] == 2){
                k = 2 * k - 1;
                x = fa1[x];
            }
            else {
                x = fa1[x];
                k = k * 2;
            }
        }
        cout << k << "\n";
    }
}
/*
100 3 1
S 1 4 2
S 2 3 5
M 3 4 6
6 51
*/

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 5776kb

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: 2ms
memory: 7880kb

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: 0
Accepted
time: 2ms
memory: 7824kb

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:

1
2
1000000000
500000000
333333333
999999999
499999999
333333332
1
1
3
3
999999999
999999999
499999999
499999999
333333331
333333331
999999997
999999997
499999997
499999997
333333329
333333329
2
2
4
4
1000000000
1000000000
500000000
500000000
333333332
333333332
999999998
999999998
499999998
4999999...

result:

ok 1000 lines

Test #4:

score: -100
Wrong Answer
time: 0ms
memory: 8068kb

input:

1000000000 10000 1000
S 1 2 3
S 2 4 5
S 4 6 7
S 6 8 9
S 8 10 11
S 10 12 13
S 12 14 15
S 14 16 17
S 16 18 19
S 18 20 21
S 20 22 23
S 22 24 25
S 24 26 27
S 26 28 29
S 28 30 31
S 30 32 33
S 32 34 35
S 34 36 37
S 36 38 39
S 38 40 41
S 40 42 43
S 42 44 45
S 44 46 47
S 46 48 49
S 48 50 51
S 50 52 53
S 52 ...

output:

1
1
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
none
n...

result:

wrong answer 3rd lines differ - expected: '536870913', found: 'none'