이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "robots.h"
#include <bits/stdc++.h>
using namespace std;
const int INF = 2e9;
bool win(array<int, 2> robot, array<int, 2> toy) {
return robot[0] > toy[0] and robot[1] > toy[1];
}
bool check(int X[], int A, int W[], int T, int k) {
int cur = 0;
for(int i = 0; i < T; i += k) {
int end = min(T, i + k);
for(int j = i; j < end; j++)
if(X[cur] <= W[j]) return false;
cur++;
}
return true;
}
int putaway(int A, int B, int T, int X[], int Y[], int W[], int S[]) {
if(T == 2) {
vector<array<int, 2>> robot;
for(int i = 0; i < A; i++) {
robot.push_back({X[i], INF});
}
for(int i = 0; i < B; i++) {
robot.push_back({INF, Y[i]});
}
vector<array<int, 2>> toy;
for(int i =0 ; i < T; i++) {
toy.push_back({W[i], S[i]});
}
for(int _ = 0; _ < 2; _++) {
bool ok = true;
for(int j = 0; j < T; j++) {
if(!win(robot[j], toy[j]))
ok = false;
}
if(ok) return 1;
reverse(robot.begin(), robot.end());
}
bool ok = true;
for(int i = 0; i < T; i++) {
bool found = false;
for(auto r: robot) if(win(r, toy[i])) {
found = true;
break;
}
if(!found) {
ok = false;
break;
}
}
if(ok) return T;
return -1;
} else {
sort(X, X + A);
reverse(X, X + A);
sort(W, W + T);
reverse(W, W + T);
if(!check(X, A, W, T, T)) return -1;
int lo = 0, hi = T;
while(lo + 1 < hi) {
int mid = (lo + hi) >> 1;
if(check(X, A, W, T, mid)) hi = mid;
else lo = mid;
}
return hi;
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |