Submission #262935

#TimeUsernameProblemLanguageResultExecution timeMemory
262935SorahISAKoala Game (APIO17_koala)C++11
47 / 100
115 ms520 KiB
#include "koala.h" #include <bits/stdc++.h> using namespace std; // #define int long long #define double long double using pii = pair<int, int>; template<typename T> using prior = std::priority_queue<T, vector<T>, greater<T>>; template<typename T> using Prior = std::priority_queue<T>; #define X first #define Y second #define ALL(x) (x).begin(), (x).end() #define eb emplace_back #define pb push_back #define fastIO() ios_base::sync_with_stdio(false), cin.tie(0) int minValue(int N, int W) { // TODO: Implement Subtask 1 solution here. // You may leave this function unmodified if you are not attempting this // subtask. int play[N], ret[N]; memset(play, 0x00, sizeof(play)); play[0] = 1; playRound(play, ret); for (int i = 0; i < N; ++i) { if (ret[i] <= play[i]) return i; } return 0; } int maxValue(int N, int W) { // TODO: Implement Subtask 2 solution here. // You may leave this function unmodified if you are not attempting this // subtask. int play[N], ret[N]; memset(play, 0x00, sizeof(play)); set<int> test; for (int i = 0; i < N; ++i) test.insert(i); while (test.size() != 1) { int cookie = W / test.size(); memset(play, 0x00, sizeof(play)); for (auto x : test) play[x] = cookie; playRound(play, ret); vector<int> tmp; for (auto x : test) { if (ret[x] <= play[x]) tmp.eb(x); } for (auto x : tmp) test.erase(x); } return *test.begin(); } set<int> known; int maxValue2(int N, int W) { int play[N], ret[N]; memset(play, 0x00, sizeof(play)); set<int> test; for (int i = 0; i < N; ++i) test.insert(i); for (auto x : known) test.erase(x); while (test.size() != 1) { int cookie = W / test.size(); memset(play, 0x00, sizeof(play)); for (auto x : test) play[x] = cookie; playRound(play, ret); vector<int> tmp; for (auto x : test) { if (ret[x] <= play[x]) tmp.eb(x); } for (auto x : tmp) test.erase(x); } return *test.begin(); } int greaterValue(int N, int W) { // TODO: Implement Subtask 3 solution here. // You may leave this function unmodified if you are not attempting this // subtask. int play[N], ret[N]; memset(play, 0x00, sizeof(play)); play[0] = play[1] = 3; playRound(play, ret); if (ret[0] != ret[1]) return ret[1] > ret[0]; if (ret[0] == 0) { play[0] = play[1] = 1; playRound(play, ret); if (ret[0] != ret[1]) return ret[1] > ret[0]; play[0] = play[1] = 2; playRound(play, ret); if (ret[0] != ret[1]) return ret[1] > ret[0]; } else { play[0] = play[1] = 5; playRound(play, ret); if (ret[0] != ret[1]) return ret[1] > ret[0]; play[0] = play[1] = 8; playRound(play, ret); if (ret[0] != ret[1]) return ret[1] > ret[0]; } return 0; } void allValues(int N, int W, int *P) { if (W == 2*N) { // TODO: Implement Subtask 4 solution here. // You may leave this block unmodified if you are not attempting this // subtask. for (int i = 0; i < N; ++i) { int mV = maxValue2(N, W); *(P + mV) = N - i; known.insert(mV); } } else { // TODO: Implement Subtask 5 solution here. // You may leave this block unmodified if you are not attempting this // subtask. for (int i = 0; i < N; ++i) { int mV = maxValue2(N, W); *(P + mV) = N - i; known.insert(mV); } } }
#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...