QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#368087#6510. Best Carry Player 3HHT0501#WA 18ms3616kbC++172.5kb2024-03-26 20:09:022024-03-26 20:09:03

Judging History

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

  • [2024-03-26 20:09:03]
  • 评测
  • 测评结果:WA
  • 用时:18ms
  • 内存:3616kb
  • [2024-03-26 20:09:02]
  • 提交

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 {
            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: 3564kb

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: 18ms
memory: 3616kb

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'