QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#115647#6510. Best Carry Player 3jzh#TL 117ms3412kbC++141.6kb2023-06-26 14:36:582023-06-26 14:36:59

Judging History

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

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-06-26 14:36:59]
  • 评测
  • 测评结果:TL
  • 用时:117ms
  • 内存:3412kb
  • [2023-06-26 14:36:58]
  • 提交

answer

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;

int count(int k) {
    int num = 0;
    while (k) {
        k >>= 1;
        num++;
    }
    return num;
}


int getval(ll x, ll y, ll k) {
    ll mid = (x ^ y);
    if (mid == 0) return 0;
    if (abs(x - y) == 1) return 1;
    if (mid <= k) return 1;
    return 2;
}

void solve() {
    ll x, y, k;
    cin >> x >> y >> k;
    if (x == y) {
        cout << 0 << "\n";
        return;
    }
    if (k <= 1) {
        cout << abs(x - y) << "\n";
        return;
    }
    ll nk = count(k);
    ll dkz = (1 << (nk)) - 1;
    if (x > y) {
        ll high_cost = ((x >> nk) - (y >> nk));
        if (high_cost == 0) {
            ll need = (x & dkz) ^ (y ^ dkz);
            ll ans = getval(x & dkz, y & dkz, k);
            cout << ans << "\n";
            return;
        }

        ll d1 = getval(x & dkz, 0, k);
        ll mid = (high_cost - 1) * (dkz == k ? 1 : 2) + high_cost;
        ll d2 = getval(y & dkz, dkz, k);

        cout << d1 + mid + d2 << "\n";
        return;
    } else {
        ll high_cost = abs(((x >> nk) - (y >> nk)));
        if (high_cost == 0) {
            ll ans = getval(x & dkz, y & dkz, k);
            cout << ans << "\n";
            return;
        }
        ll d1 = getval(x & dkz, dkz, k);
        ll mid = (high_cost - 1) * (dkz == k ? 1 : 2) + high_cost;
        ll d2 = getval(y & dkz, 0, k);
        cout << d1 + mid + d2 << "\n";
        return;

    }


}

int main() {
    ios::sync_with_stdio(false);
    int t;
    cin >> t;
    while (t--) {
        solve();
    }

    return 0;
}
/*
5
2
1 2
3
2 3 1
4
1 4 3 2
5
1 5 2 3 4
6
1 2 3 4 5 6


 */

詳細信息

Test #1:

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

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: 0
Accepted
time: 117ms
memory: 3408kb

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:

ok 100000 numbers

Test #3:

score: 0
Accepted
time: 105ms
memory: 3348kb

input:

100000
322 25 2699
83 407 606
157 77 162
358 3 4064
407 35 1145
15 491 801
174 95 1886
67 93 2573
415 7 2014
16 203 2003
95 357 453
287 14 1247
63 108 3617
124 30 3806
116 425 830
483 63 2237
97 123 1194
124 460 2729
71 99 818
118 24 527
92 236 3298
446 55 413
0 122 3335
193 64 318
55 201 3120
475 8...

output:

1
1
2
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
7
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
6
1
1
1
1
3
1
1
1
3
1
1
1
1
1
1
1
1
5
1
1
1
1
1
1
2
1
1
1
1
6
1
1
1
6
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
2
2
1
10
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
114
1
1
1
1
1
1
1
1...

result:

ok 100000 numbers

Test #4:

score: 0
Accepted
time: 47ms
memory: 3412kb

input:

100000
460 16 1999514420
38 120 459071025
36 5 435961014
415 44 1634888670
236 110 1172545331
116 449 1722938168
9 55 1093539809
98 9 2009254678
160 13 874849076
72 59 307472779
94 278 829310177
375 21 1588655085
85 272 1310414813
101 309 2072973009
96 370 510582365
55 6 285781515
45 99 743723479
43...

output:

1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
0
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
...

result:

ok 100000 numbers

Test #5:

score: -100
Time Limit Exceeded

input:

100000
102 211 434535176914392191
113 382 10473939473902551
154 70 347749780432060530
307 4 770301859497555482
21 88 1148164284941713103
141 52 298799672146159282
86 67 592474494235856008
126 423 500925453682730053
72 23 751099353059890065
105 60 591595972426609814
1 312 322398882693527462
488 21 29...

output:


result: