Submission #305571

#TimeUsernameProblemLanguageResultExecution timeMemory
305571sofapudenKoala Game (APIO17_koala)C++14
47 / 100
97 ms632 KiB
#include "koala.h" #include <bits/stdc++.h> using namespace std; int arr1[100], arr2[100]; vector<int> ord; set<int> used; vector<int> glo; int n, w; 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. for(int i = 0; i < N; ++i){ arr1[i] = 0; } arr1[0] = 1; playRound(arr1, arr2); for(int i = 0; i < N; ++i){ if(arr2[i] <= arr1[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. vector<int> go(N); iota(go.begin(),go.end(),0); int sz = go.size(); while(sz != 1){ for(int i = 0; i < N; ++i){ arr1[i] = 0; arr2[i] = 0; } for(int i = 0; i < sz; ++i){ arr1[go[i]] = W/sz; } playRound(arr1,arr2); go.clear(); for(int i = 0; i < N; ++i){ if(arr2[i] > arr1[i] && arr1[i] > 0)go.push_back(i); } sz = go.size(); } return go[0]; } 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. memset(arr1,0,N); arr1[0] = 4; arr1[1] = 4; playRound(arr1,arr2); if(arr2[0] <= 4 && arr2[1] <= 4){ arr1[0] = 2; arr1[1] = 2; playRound(arr1,arr2); if(arr2[0] <= 2 && arr2[1] <= 2){ arr1[0] = 1; arr1[1] = 1; playRound(arr1,arr2); return arr2[1] > arr2[0]; } if(arr2[0] > 2 && arr2[1] > 2){ arr1[0] = 3; arr1[1] = 3; playRound(arr1,arr2); return arr2[1] > arr2[0]; } return arr2[1] > arr2[0]; } if(arr2[0] > 4 && arr2[1] > 4){ arr1[0] = 8; arr1[1] = 8; playRound(arr1,arr2); if(arr2[0] <= 8 && arr2[1] <= 8){ arr1[0] = 6; arr1[1] = 6; playRound(arr1,arr2); return arr2[1] > arr2[0]; } return arr2[1] > arr2[0]; } return arr2[1] > arr2[0]; } bool comp(int a, int b){ for(int i = 0; i < n; ++i){ arr1[i] = 0; } arr1[a] = arr1[b] = n; playRound(arr1,arr2); return arr2[a] < arr2[b]; } void solve(int l, int r){ if(l == r)return; memset(arr1,0,sizeof arr1); vector<int> a, b; int cn = 0; int us = 0; while(us <= n-r){ cn++; us+=cn; } us-=cn; cn--; for(int i = l; i <= r; ++i){ arr1[glo[i]] = cn; } playRound(arr1, arr2); for(int i = l; i <= r; ++i){ if(arr2[glo[i]] > arr1[glo[i]]){ a.push_back(glo[i]); } else{ b.push_back(glo[i]); } } for(int i = l; i < l+(int)a.size(); ++i){ glo[i] = a[i-l]; } for(int i = l+a.size(); i <= r; ++i){ glo[i] = b[i-l-a.size()]; } solve(l,a.size()+l-1); solve(a.size()+l,r); } void allValues(int N, int W, int *P) { n = N;w = W; if(N*2 == W){ // TODO: Implement Subtask 4 solution here. // You may leave this block unmodified if you are not attempting this // subtask. vector<int> x(N); iota(x.begin(),x.end(),0); stable_sort(x.begin(),x.end(),comp); for(int i = 0; i < N; ++i){ P[x[i]] = i+1; } } 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){ glo.push_back(i); } solve(0,N-1); for(int i = 0; i < N; ++i){ P[glo[i]] = N-i; } } }
#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...