QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#259882 | #7689. Flipping Cards | ucup-team870 | WA | 0ms | 3600kb | C++14 | 1.2kb | 2023-11-21 15:42:15 | 2023-11-21 15:42:17 |
Judging History
answer
#include <iostream>
#include <vector>
#include <utility>
#include <algorithm>
using namespace std;
bool check(long long mid, const std::vector<std::pair<int, int>>& cards) {
int s1 = 0;
std::vector<int> c(cards.size());
for (int i = 0; i < cards.size(); i++) {
const auto& card = cards[i];
if (card.first >= mid) {
s1++;
}
c[i] = (card.second >= mid) - (card.first >= mid);
}
int maxSubArraySum = c[0];
int currentSubArraySum = c[0];
for (int i = 1; i < c.size(); i++) {
currentSubArraySum = max(c[i], currentSubArraySum + c[i]);
maxSubArraySum = max(maxSubArraySum, currentSubArraySum);
}
int s2 = maxSubArraySum;
return s1 + s2 > cards.size() / 2;
}
int main() {
int n;
cin >> n;
vector<pair<int, int>> cards(n);
for (int i = 0; i < n; i++) {
cin >> cards[i].first >> cards[i].second;
}
long long l = 1, r = 1e9;
while (l < r) {
long long mid = (l + r + 1) / 2;
if (check(mid, cards)) {
l = mid;
} else {
r = mid - 1;
}
}
cout << l << endl;
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 3600kb
input:
5 3 6 5 2 4 7 6 4 2 8
output:
6
result:
ok 1 number(s): "6"
Test #2:
score: -100
Wrong Answer
time: 0ms
memory: 3508kb
input:
1 2 1
output:
1
result:
wrong answer 1st numbers differ - expected: '2', found: '1'