QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#466880 | #7689. Flipping Cards | Water_OR# | WA | 1ms | 5656kb | C++17 | 2.1kb | 2024-07-08 11:33:46 | 2024-07-08 11:33:46 |
Judging History
answer
#include <bits/stdc++.h>
size_t n;
typedef std::pair<int, int> two;
two input_array[300005];
int worth_low[300005], worth_high[300005];
inline bool check(int mid) {
int counter_low = 0, counter_high = 0;
// std::cout << "# " << mid << "\n|";
for (size_t i = 0; i < n; ++i) {
if (input_array[i].first < mid) { ++counter_low; }
if (input_array[i].first <= mid) { ++counter_high; }
if (input_array[i].first < mid && input_array[i].second >= mid) { worth_low[i] = 1; }
if (input_array[i].first >= mid && input_array[i].second < mid) { worth_low[i] = -1; }
if (input_array[i].first <= mid && input_array[i].second > mid) { worth_high[i] = 1; }
if (input_array[i].first > mid && input_array[i].second <= mid) { worth_high[i] = -1; }
// std::cout << " " << worth[i];
}
// std::cout << "\n| " << counter << "\n";
for (size_t i = 1; i < n; ++i) { worth_low[i] += worth_low[i - 1]; worth_high[i] += worth_high[i - 1]; }
int min_worth_low = 0, min_worth_high = 0;
for (size_t i = 0; i < n; ++i) {
if (counter_low - n / 2 <= worth_low[i] - min_worth_low && worth_high[i] - min_worth_high <= counter_high - n / 2) { return true; }
min_worth_low = std::min(min_worth_low, worth_low[i]);
min_worth_high = std::min(min_worth_high, worth_high[i]);
}
return false;
}
inline void solve() {
size_t *index_array;
index_array = new size_t[n];
for (size_t i = 0; i < n; ++i) { index_array[i] = i; }
std::sort(index_array, index_array + n, [=](const size_t &x, const size_t &y) { return input_array[x].first < input_array[y].first; });
int answer = input_array[index_array[n / 2]].first;
size_t length = INT32_MAX - answer;
while (length > 0) {
size_t half = length - (length >> 1);
int mid = answer + half;
if (check(mid)) {
answer = mid;
length = length - half;
} else {
length = half - 1;
}
}
std::cout << answer << std::endl;
}
signed main() {
std::cin >> n;
for (size_t i = 0; i < n; ++i) {
std::cin >> input_array[i].first >> input_array[i].second;
}
solve();
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 1ms
memory: 5644kb
input:
5 3 6 5 2 4 7 6 4 2 8
output:
6
result:
ok 1 number(s): "6"
Test #2:
score: 0
Accepted
time: 1ms
memory: 5656kb
input:
1 2 1
output:
2
result:
ok 1 number(s): "2"
Test #3:
score: -100
Wrong Answer
time: 1ms
memory: 5548kb
input:
1 212055293 384338286
output:
453983836
result:
wrong answer 1st numbers differ - expected: '384338286', found: '453983836'