제출 #969944

#제출 시각아이디문제언어결과실행 시간메모리
969944CDuongKoala Game (APIO17_koala)C++17
0 / 100
1 ms600 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...