이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "koala.h"
#include <bits/stdc++.h>
#define isz(x) (int)x.size()
using namespace std;
int B[105], R[105];
int minValue(int N, int W) {
return 0;
}
int maxValue(int N, int W) {
return 0;
}
int greaterValue(int N, int W) {
return 0;
}
int calc(int start, int len) {
len = min(len, start);
return start * len - len * (len - 1) / 2;
}
int transform(int x, int n, int val) {
int nx = max(x, n - n / (val + 1) + 1);
int start = x - 1 - (n - (n - nx + 1) * (val + 1));
// cout << nx << " " << start << endl;
while (nx <= n and nx <= calc(start, val + 1)) {
++nx, start -= val + 1;
// cout << nx << " " << start << endl;
}
return nx;
}
void allValues(int n, int w, int *ans) {
if (w == 2 * n) {
return;
}
auto cook = [&](auto self, vector<int> idx, int l, int r) -> void {
if (l == r) ans[idx.front()] = 0;
for (int i = r / (r - l); i >= 1; --i) {
int nl = transform(l, r, i);
if (l < nl and nl < r) {
fill(B, B + n, 0);
for (auto idx_ : idx) B[idx_] = i;
playRound(B, R);
vector<int> left, right;
for (auto idx_ : idx) {
if (R[idx_] > i) right.emplace_back(idx_);
else left.emplace_back(idx_);
}
self(self, left, l, l + isz(left));
self(self, right, r - isz(right), r);
assert(l + isz(left) == r - isz(right));
return;
}
assert(0);
}
};
vector<int> idx(n);
iota(idx.begin(), idx.end(), 0);
cook(cook, idx, 1, n + 1);
}
// int main() {
// cout << transform(92, 100, 11) << endl;
// }
# | 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... |