QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#213615 | #7560. Computer Network | ucup-team1883# | WA | 1ms | 6020kb | C++17 | 1.2kb | 2023-10-14 15:09:06 | 2023-10-14 15:09:07 |
Judging History
answer
#include <iostream>
const int inf = 2e9;
const int N = 1000005;
int a[N], b[N];
int n;
int main() {
scanf("%d", &n);
for (int i = 1; i <= n; ++i) {
scanf("%d", a + i);
}
for (int i = 1; i <= n; ++i) {
scanf("%d", b + i);
}
long long ans = 1e12;
for (int k = 0; k <= 31; ++k) {
int mn = inf, mx = 0;
for (int i = 1; i <= n; ++i) {
int t = b[i] - (a[i] >> k);
mn = std::min(mn, t);
mx = std::max(mx, t);
}
if (mn < 0) continue;
if (mx - mn > 1) continue;
if (mx == mn) {
ans = std::min(ans, 1ll * k);
continue;
}
int l = 0, r = inf;
for (int i = 1; i <= n; ++i) {
int t = b[i] - (a[i] >> k);
if (t == mx) {
int ad = (1u << k) - (((1u << k) - 1) & a[i]);
l = std::max(l, ad);
} else {
int ad = (1u << k) - 1 - (((1u << k) - 1) & a[i]);
r = std::min(r, ad);
}
}
if (l > r) continue;
long long tmp = k + mn;
for (int t = k; t >= 0; --t) {
if ((l >> t & 1) != (r >> t & 1)) {
++tmp;
break;
}
if (r >> t & 1) ++tmp;
}
ans = std::min(ans, tmp);
}
if (ans > 1e11) ans = -1;
printf("%lld\n", ans);
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 1ms
memory: 6020kb
input:
5 1 2 3 4 5 6 6 6 6 7
output:
9
result:
ok 1 number(s): "9"
Test #2:
score: 0
Accepted
time: 1ms
memory: 5944kb
input:
3 2 3 4 1 2 3
output:
-1
result:
ok 1 number(s): "-1"
Test #3:
score: 0
Accepted
time: 1ms
memory: 6008kb
input:
2 65536 65537 1 2
output:
32
result:
ok 1 number(s): "32"
Test #4:
score: -100
Wrong Answer
time: 1ms
memory: 5876kb
input:
1 0 28
output:
0
result:
wrong answer 1st numbers differ - expected: '28', found: '0'