제출 #224412

#제출 시각아이디문제언어결과실행 시간메모리
224412Bruteforceman코알라 (APIO17_koala)C++11
81 / 100
77 ms512 KiB
#include <bits/stdc++.h> #include "koala.h" using namespace std; 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 A[N], B[N]; for(int i = 0; i < N; i++) { if(i) A[i] = 0; else A[i] = 1; } playRound(A, B); for(int i = 0; i < N; i++) { if(A[i] >= B[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> can; for(int i = 0; i < N; i++) can.emplace_back(i); int A[N], B[N]; for(int i = 1; i <= 13; i++) { memset(A, 0, sizeof A); for(int j : can) { A[j] = i; } playRound(A, B); vector <int> aux; for(int j : can) { if(A[j] < B[j]) aux.emplace_back(j); } swap(can, aux); if(can.size() == 1) return can[0]; } return 0; } int cmp(int sz, int coin, int N, int W) { // TODO: Implement Subtask 3 solution here. // You may leave this function unmodified if you are not attempting this // subtask. if(N == W) return 0; int l = 1, r = min(13, coin / 2); int A[sz], B[sz]; while(l <= r) { int m = (l + r) >> 1; memset(A, 0, sizeof A); A[N] = A[W] = m; playRound(A, B); if(A[N] < B[N] && A[W] < B[W]) { l = m + 1; } else if (A[N] >= B[N] && A[W] >= B[W]) { r = m - 1; } else { return B[N] < B[W]; } } return 0; } int greaterValue(int N, int W) { return cmp(N, W, 0, 1); } void selfSort(vector <int> &v, function <bool (int, int)> f) { if(v.size() <= 1) return ; vector <int> l, r; int m = v.size() / 2; for(int i = 0; i < m; i++) l.emplace_back(v[i]); for(int i = m; i < v.size(); i++) r.emplace_back(v[i]); v.clear(); selfSort(l, f); selfSort(r, f); int i = 0, j = 0; while(i < l.size() || j < r.size()) { if(i < l.size() && j < r.size()) { if(f(l[i], r[j])) v.emplace_back(l[i++]); else v.emplace_back(r[j++]); } else if (i < l.size()) v.emplace_back(l[i++]); else v.emplace_back(r[j++]); } } void getAll(vector <int> &v, int N, int W) { int opt = W / v.size(); int A[N], B[N]; memset(A, 0, sizeof A); for(int i : v) { A[i] = opt; } playRound(A, B); vector <int> left, right; for(int i : v) { if(A[i] < B[i]) right.emplace_back(i); else left.emplace_back(i); } if(left.empty() || right.empty()) { selfSort(v, [&] (int i, int j) { return cmp(N, W, i, j); }); } else { getAll(left, N, W); getAll(right, N, W); v = left; for(int i : right) v.emplace_back(i); } } void allValues(int N, int W, int *P) { vector <int> v (N); for(int i = 0; i < N; i++) { v[i] = i; } getAll(v, N, W); for(int i = 0; i < N; i++) { P[v[i]] = i + 1; } }

컴파일 시 표준 에러 (stderr) 메시지

koala.cpp: In function 'void selfSort(std::vector<int>&, std::function<bool(int, int)>)':
koala.cpp:74:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int i = m; i < v.size(); i++) r.emplace_back(v[i]);
                  ~~^~~~~~~~~~
koala.cpp:79:11: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   while(i < l.size() || j < r.size()) {
         ~~^~~~~~~~~~
koala.cpp:79:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   while(i < l.size() || j < r.size()) {
                         ~~^~~~~~~~~~
koala.cpp:80:10: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     if(i < l.size() && j < r.size()) {
        ~~^~~~~~~~~~
koala.cpp:80:26: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     if(i < l.size() && j < r.size()) {
                        ~~^~~~~~~~~~
koala.cpp:83:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     } else if (i < l.size()) v.emplace_back(l[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...