QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#131405#6510. Best Carry Player 3nhuang685WA 18ms3576kbC++201.4kb2023-07-27 03:40:412023-07-27 03:40:43

Judging History

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

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

answer

/**
 * @file qoj6510F1.cpp
 * @author n685
 * @brief
 * @date 2023-07-26
 *
 *
 */
#include <bits/stdc++.h>

#ifdef LOCAL
std::ifstream cin;
std::ofstream cout;
using std::cerr;
#else
using std::cin;
using std::cout;
#define cerr                                                                   \
  if (false)                                                                   \
  std::cerr
#endif

const int MX = 60;

void solve() {
  int64_t X, Y, K;
  cin >> X >> Y >> K;
  if (K <= 1) {
    cout << std::abs(X - Y) << '\n';
    return;
  }
  if (X == Y) {
    cout << "0\n";
    return;
  }
  if (X > Y)
    std::swap(X, Y);
  int m = std::__lg(K);
  int64_t ans = 0;

  {
    int64_t t = (X | ((1 << (m + 1)) - 1)) + 1;
    if ((X ^ t) <= K || t - X <= 1)
      ans++;
    else if (t - X <= 2 || (X ^ (t - 1)) <= K)
      ans += 2;
    else
      ans += 3;
    X = t;
  }

  ans += (Y / (1 << (m + 1)) - X / (1 << (m + 1))) *
         (K == (1 << (m + 1)) - 1 ? 2 : 3);

  X += (1 << (m + 1)) * (Y / (1 << (m + 1)) - X / (1 << (m + 1)));
  if (X != Y) {
    if ((X ^ Y) <= K || Y - X == 1) {
      ans++;
    } else
      ans += 2;
  }

  cout << ans << '\n';
}

int main() {
#ifdef LOCAL
  cin.open("input.txt");
  cout.rdbuf()->pubsetbuf(0, 0);
  cout.open("output.txt");
#else
  cin.tie(nullptr)->sync_with_stdio(false);
#endif

  int t;
  cin >> t;
  while (t--)
    solve();
}

詳細信息

Test #1:

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

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: 3476kb

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 220th numbers differ - expected: '1', found: '0'