제출 #1003450

#제출 시각아이디문제언어결과실행 시간메모리
1003450PoPularPlusPlus버섯 세기 (IOI20_mushrooms)C++17
80.14 / 100
6 ms448 KiB
#include "mushrooms.h" #include <bits/stdc++.h> using namespace std; #define ll long long #define pb(x) push_back(x) #define mp(x,y) make_pair(x,y) #define all(x) x.begin(),x.end() #define vf first #define vs second pair<int,int> cal(int tp , int type){ pair<int,int> p = mp(0,0); if(type == 0){ if(tp % 2 == 1){ p.vf = 1; } if(tp >= 2){ p.vs = 1; } } else { if(tp % 2 == 0){ p.vf = 1; } if(tp < 2){ p.vs = 1; } } return p; } int cal1(int tp , int type , int tot){ int res = 0; if(type == 0){ if(tp % 2 == 0)res++; tot--; res += tot; res -= tp/2; } else { if(tp % 2 == 1)res++; res += tp/2; } return res; } int count_mushrooms(int n) { if(n == 2){ return 1 + (use_machine({0,1}) == 0 ? 1 : 0); } int ans = 1; vector<int> ask; ask.pb(0); ask.pb(1); int tp = use_machine(ask); vector<int> a , b; a.pb(0); pair<int,int> p; int start = 2; int type = 0; if(tp == 0){ a.pb(1); ans++; p = mp(0 , 1); } else { b.pb(1); start++; ask.pop_back(); ask.pb(2); tp = use_machine(ask); if(tp == 0){ a.pb(2); ans++; p = mp(0,2); } else { b.pb(2); p = mp(1,2); type = 1; } } while(a.size() < 130 && b.size() < 130 && start < n){ if(start + 1 == n){ tp = use_machine({0 , start}); if(tp == 0){ ans++; } start++; } else { tp = use_machine({start,p.vf,start + 1,p.vs}); pair<int,int> val = cal(tp , type); if(val.vf == 0){ ans++; a.pb(start); } else { b.pb(start); } start++; if(val.vs == 0){ ans++; a.pb(start); } else { b.pb(start); } start++; } } if(start >= n){ return ans; } while(start < n){ int rem = n - start; if(rem > max(a.size(),b.size())){ ask.clear(); for(int i = start , j = 0; j < max(a.size(), b.size()); i++,j++){ ask.pb(start++); if(a.size() >= b.size()){ ask.pb(a[j]); } else ask.pb(b[j]); } tp = use_machine(ask); ans += cal1(tp , (a.size() >= b.size() ? 0 : 1),ask.size()/2); } else { ask.clear(); for(int i = start , j = 0; i < n; i++,j++){ ask.pb(start++); if(a.size() >= b.size()){ ask.pb(a[j]); } else ask.pb(b[j]); } tp = use_machine(ask); ans += cal1(tp , (a.size() >= b.size() ? 0 : 1),ask.size()/2); } } return ans; }

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

mushrooms.cpp: In function 'int count_mushrooms(int)':
mushrooms.cpp:119:10: warning: comparison of integer expressions of different signedness: 'int' and 'const long unsigned int' [-Wsign-compare]
  119 |   if(rem > max(a.size(),b.size())){
      |      ~~~~^~~~~~~~~~~~~~~~~~~~~~~~
mushrooms.cpp:121:33: warning: comparison of integer expressions of different signedness: 'int' and 'const long unsigned int' [-Wsign-compare]
  121 |    for(int i = start , j = 0; j < max(a.size(), b.size()); i++,j++){
      |                               ~~^~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...