QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#368094#6510. Best Carry Player 3HHT0501#WA 15ms3576kbC++172.7kb2024-03-26 20:17:312024-03-26 20:17:31

Judging History

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

  • [2024-03-26 20:17:31]
  • 评测
  • 测评结果:WA
  • 用时:15ms
  • 内存:3576kb
  • [2024-03-26 20:17:31]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
const int N = 100;

void solve() {
    long long n, m, k, id;
    cin >> n >> m >> k;
    if(n < m) swap(n, m);
    if(k == 0 || k == 1) {
        cout << m - n << '\n';
        return;
    }
    long long ans = m - n;
    for(int i = 60;i >= 0;i--) {
        if(k >> i & 1) {
            id = i;
            break;
        }
    }
    for(int i = 60;i >= 0;i--) {
        int x = (n >> i & 1), y = (m >> i & 1);
        int res = 0;
        if(y > x) {
            if(k >= (1ll << i)) {
                
            }
            else {
                if((n >> id & 1) == 1 && (n >> (id + 1) & 1) == 0) {
                    n++;
                    if((n >> id & 1) == 0 && (n >> (id + 1) & 1) == 1) {
                        
                    }
                    n--;
                }
            }
        }
    }
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    int T;cin >> T; //solve();
    while(T -- ) {
        long long n, m, k;
        cin >> n >> m >> k;
        if (n > m) swap(n, m);
        if (k == 0 || k == 1) {
            cout << abs(n - m) << '\n';
            continue;
        }
        int t = 0;
        for (int i = 60; i >= 0; i--)
            if (k >> i & 1) {
                t = i;
                break;
            }
        long long a = n >> (t + 1), b = m >> (t + 1);
        long long ans = 0;
        if (a < b) {
            if (k == (1ll << (t + 1)) - 1) {
                if (n % (1ll << (t + 1)) == k) {
                    ans += 1;
                    a++;
                } else {
                    ans += 2;
                    a++;
                }
                ans += (b - a) * 2;
            } else {
                if (n % (1ll << (t + 1)) == (1ll << (t + 1)) - 1) {
                    ans += 1;
                    a++;
                } else {
                    long long sum = 0;
                    for (int i = t; i >= 0; i--)
                        if ((n >> i & 1) == 0) sum += 1ll << i;
                    if (sum <= k) ans += 2;
                    else ans += 3;
                    a++;
                } 
                ans += (b - a) * 3;
            }
            if(m % (1ll << (t + 1)) == 0) ;
            else if (m % (1ll << (t + 1)) <= k) ans += 1;
            else ans += 2;
        } else {
            if (n % (1ll << (t + 1)) == m %  (1ll << (t + 1)));
            else {
            long long sum = 0;
            for (int i = t; i >= 0; i--)
                if ((n >> i & 1) != (m >> i & 1)) sum += 1ll << i;
            if (sum <= k) ans += 1;
            else ans += 2;}
        }
        cout << ans << '\n';
    }
       
    return 0;
}

詳細信息

Test #1:

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

input:

8
4 5 0
5 8 3
9 2 6
15 28 5
97 47 8
164 275 38
114514 1919 810
0 1152921504606846975 1

output:

1
2
3
5
11
6
331
1152921504606846975

result:

ok 8 numbers

Test #2:

score: -100
Wrong Answer
time: 15ms
memory: 3576kb

input:

100000
84 318 6
54 226 7
92 33 0
39 54 5
76 79 7
247 110 0
211 90 0
4 430 3
230 17 1
491 93 5
196 117 7
137 29 2
76 490 6
422 43 7
277 26 4
159 43 1
67 37 5
17 2 5
113 176 7
85 473 0
68 217 7
275 8 7
124 34 1
30 66 0
80 149 3
103 149 6
84 354 1
27 342 7
94 114 1
69 125 1
72 48 7
361 8 7
285 82 1
74 ...

output:

87
45
59
6
1
137
121
213
213
150
21
81
156
95
95
116
12
6
16
388
39
67
90
36
35
17
270
79
20
56
6
89
203
108
26
15
157
98
111
389
174
123
59
289
78
17
21
36
275
191
17
102
60
93
100
11
6
79
44
63
91
60
22
109
11
3
10
67
11
85
207
47
39
83
156
189
107
27
81
247
81
335
33
144
11
50
54
347
233
175
30
7...

result:

wrong answer 809th numbers differ - expected: '1', found: '2'