제출 #701199

#제출 시각아이디문제언어결과실행 시간메모리
701199Abrar_Al_Samit코알라 (APIO17_koala)C++17
65 / 100
46 ms440 KiB
#include "koala.h" #include<bits/stdc++.h> using namespace std; int minValue(int N, int W) { int B[N], R[N]; for(int i=0; i<N; ++i) { B[i] = R[i] = 0; } B[0] = 1; playRound(B, R); if(R[0]<=1) { return 0; } for(int i=1; i<N; ++i) { if(R[i]==0) return i; } } int maxValue(int N, int W) { int B[N] = {0}, R[N] = {0}; set<int>s; for(int i=0; i<N; ++i) { s.insert(i); } while(s.size()>1) { int val = W / s.size(); memset(B, 0, sizeof B); memset(R, 0, sizeof R); for(int x : s) { B[x] = val; } playRound(B, R); set<int>new_s; for(int i=0; i<N; ++i) if(R[i]>B[i]) { if(s.count(i)) new_s.insert(i); } s = new_s; } return *s.begin(); } int greaterValue(int N, int W) { int B[N] = {0}, R[N] = {0}; int l = 1, r = 13; while(l<r) { int mid = (l+r+1)/2; B[0] = B[1] = mid; playRound(B, R); if(B[0]<R[0] && B[1]<R[1]) { l = mid; } else if(B[0]>=R[0] && B[1]>=R[1]) { r = mid-1; } else { if(R[0]>B[0]) return 0; return 1; } } } void allValues(int N, int W, int *P) { int B[N] = {0}, R[N] = {0}; if (W == 2*N) { vector<vector<int>>grps(14); fill(B, B+N, 1); for(int i=0; i<N; ++i) { int l = 0, r = 13; while(l<r) { int mid = (l+r+1)/2; B[i] = mid+1; playRound(B, R); if(R[i]>B[i]) { l = mid; } else { r = mid-1; } B[i] = 1; } grps[l].push_back(i); } vector<int>order; for(int i=0; i<14; ++i) { vector<int>cur; while(!grps[i].empty()) { fill(B, B+N, 1); int upto = grps[i].size(), S = 0; for(int j=0; j<grps[i].size(); ++j) { if(S+i>W) { upto = j; break; } S += i; B[grps[i][j]] = i+1; } playRound(B, R); int mxid = -1, where; for(int j=0; j<upto; ++j) { if(B[grps[i][j]]<R[grps[i][j]]) { mxid = grps[i][j]; where = j; } } fill(B, B+N, 1); S = 0; for(int j=upto; j<grps[i].size(); ++j) { B[grps[i][j]] = i+1; S += i; } B[mxid] = i+1; S += i; assert(S<=W); playRound(B, R); if(R[mxid]>B[mxid]); else { for(int j=upto; j<grps[i].size(); ++j) { if(R[grps[i][j]]>B[grps[i][j]]) { mxid = grps[i][j]; where = j; } } } cur.push_back(mxid); swap(grps[i].back(), grps[i][where]); grps[i].pop_back(); if(grps[i].empty()) { reverse(cur.begin(), cur.end()); for(int j : cur) { order.push_back(j); } } } } for(int i=0; i<N; ++i) { P[order[i]] = i+1; } } else { vector<vector<int>>grps(14); for(int i=0; i<N; ++i) { int l = 0, r = 13; while(l<r) { int mid = (l+r+1)/2; B[i] = mid; playRound(B, R); if(R[i]>B[i]) { l = mid; } else { r = mid-1; } B[i] = 0; } grps[l].push_back(i); } vector<int>order; for(int i=0; i<14; ++i) { vector<int>cur; while(!grps[i].empty()) { memset(B, 0, sizeof B); int upto = grps[i].size(), S = 0; for(int j=0; j<grps[i].size(); ++j) { if(S+i>W) { upto = j; break; } S += i; B[grps[i][j]] = i; } playRound(B, R); int mxid = -1, where; for(int j=0; j<upto; ++j) { if(B[grps[i][j]]<R[grps[i][j]]) { mxid = grps[i][j]; where = j; } } memset(B, 0, sizeof B); S = 0; for(int j=upto; j<grps[i].size(); ++j) { B[grps[i][j]] = i; S += i; } B[mxid] = i; S += i; assert(S<=W); playRound(B, R); if(R[mxid]>B[mxid]); else { for(int j=upto; j<grps[i].size(); ++j) { if(R[grps[i][j]]>B[grps[i][j]]) { mxid = grps[i][j]; where = j; } } } cur.push_back(mxid); swap(grps[i].back(), grps[i][where]); grps[i].pop_back(); if(grps[i].empty()) { reverse(cur.begin(), cur.end()); for(int j : cur) { order.push_back(j); } } } } for(int i=0; i<N; ++i) { P[order[i]] = i+1; } } }

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

koala.cpp: In function 'void allValues(int, int, int*)':
koala.cpp:103:31: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  103 |                 for(int j=0; j<grps[i].size(); ++j) {
      |                              ~^~~~~~~~~~~~~~~
koala.cpp:124:34: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  124 |                 for(int j=upto; j<grps[i].size(); ++j) {
      |                                 ~^~~~~~~~~~~~~~~
koala.cpp:135:38: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  135 |                     for(int j=upto; j<grps[i].size(); ++j) {
      |                                     ~^~~~~~~~~~~~~~~
koala.cpp:184:31: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  184 |                 for(int j=0; j<grps[i].size(); ++j) {
      |                              ~^~~~~~~~~~~~~~~
koala.cpp:205:34: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  205 |                 for(int j=upto; j<grps[i].size(); ++j) {
      |                                 ~^~~~~~~~~~~~~~~
koala.cpp:216:38: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  216 |                     for(int j=upto; j<grps[i].size(); ++j) {
      |                                     ~^~~~~~~~~~~~~~~
koala.cpp: In function 'int minValue(int, int)':
koala.cpp:20:1: warning: control reaches end of non-void function [-Wreturn-type]
   20 | }
      | ^
koala.cpp: In function 'int greaterValue(int, int)':
koala.cpp:70:1: warning: control reaches end of non-void function [-Wreturn-type]
   70 | }
      | ^
koala.cpp: In function 'void allValues(int, int, int*)':
koala.cpp:224:51: warning: 'where' may be used uninitialized in this function [-Wmaybe-uninitialized]
  224 |                 swap(grps[i].back(), grps[i][where]);
      |                                                   ^
koala.cpp:143:51: warning: 'where' may be used uninitialized in this function [-Wmaybe-uninitialized]
  143 |                 swap(grps[i].back(), grps[i][where]);
      |                                                   ^
#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...