QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#178881#6510. Best Carry Player 3ykpcx#WA 13ms3824kbC++171.1kb2023-09-14 14:52:582023-09-14 14:52:59

Judging History

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

  • [2023-09-14 14:52:59]
  • 评测
  • 测评结果:WA
  • 用时:13ms
  • 内存:3824kb
  • [2023-09-14 14:52:58]
  • 提交

answer

#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
#include <set>
#include <unordered_set>
#include <map>
#include <unordered_map>
#include <queue>
#include <bitset>

using namespace std;
using ll = long long;
const int N = 2e6 + 5;

ll x, y, k;

int leftone(ll x) {
  int k = 0;
  while (x) {
    k++;
    x >>= 1;
  }

  return k;
}

ll solve() {
  cin >> x >> y >> k;
  if (y < x) swap(x, y);
  if (x == y) return 0;
  if (k == 0 || k == 1) return y - x;

  int lk = leftone(k);
  ll lhx = x >> lk;
  ll lhy = y >> lk;
  ll km = (1LL << lk) - 1;
  ll rhx = x & km;
  ll rhy = y & km;
  ll cnt = 0;
  if (lhx != lhy) {
    if (rhx == km) {
      rhx = 0;
      cnt++;
    } else {
      if (rhx >= ~k) cnt += 2;
      else cnt += 3;
    }
    rhx = 0;
    lhx++;
    cnt += (lhy - lhx) * 3;
  }
  
  if (rhx != rhy) {
   
    if (abs(rhy - rhx) == 1) cnt++;
    else {
      ll t = rhx ^ rhy;
      cnt += t > k ? 2 : 1;
    }
  }

  return cnt;
}

int main() {
  ios::sync_with_stdio(false); cin.tie(0);

  int t;
  cin >> t;
  while (t--) printf("%lld\n", solve());

  return 0;  
}


Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 1ms
memory: 3824kb

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: 13ms
memory: 3776kb

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
66
59
6
1
137
121
318
213
150
30
81
156
141
94
116
12
6
23
388
57
99
90
36
51
17
270
117
20
56
8
132
203
108
25
15
156
97
165
389
174
123
59
289
78
17
30
53
275
191
16
102
60
93
99
15
6
79
43
63
91
60
22
108
11
3
9
99
10
85
207
47
39
83
156
189
159
27
120
247
120
335
48
144
11
74
54
347
233
261
4...

result:

wrong answer 2nd numbers differ - expected: '45', found: '66'