제출 #433100

#제출 시각아이디문제언어결과실행 시간메모리
433100peuch버섯 세기 (IOI20_mushrooms)C++17
0 / 100
102 ms712 KiB
#include "mushrooms.h" #include<bits/stdc++.h> using namespace std; int count_mushrooms(int n) { vector<int> ans (n); vector<int> marc (n); marc[0] = 1; ans[0] = 1; vector<int> ask; for(int i = 0; i < n; i++) ask.push_back(i); int val = use_machine(ask); marc[n - 1] = 1; ans[n - 1] = val % 2 == 0; int a = 0; if(val == 0) return n; else if(val == 1){ ask.clear(); ask.push_back(0); ask.push_back(1); if(use_machine(ask) == 1) return 1; a = 1; } else if(val % 2 == 0) a = n - 1; else{ int ini = 1, fim = n - 1; while(ini != fim){ int mid = (ini + fim) >> 1; ask.clear(); for(int i = 0; i <= mid; i++) ask.push_back(i); int aux = use_machine(ask); marc[mid] = 1; ans[mid] = aux % 2 == 0; if(aux % 2 == 0){ a = mid; break; } if(aux == val) fim = mid - 1; else ini = mid + 1; } if(a == 0) return 1; } queue<int> fila; for(int i = 0; i < n; i++){ if(marc[i]) continue; fila.push(i); } while(fila.size() > 1){ int c = fila.front(); fila.pop(); int d = fila.front(); fila.pop(); vector<int> ask2 (4); ask2[0] = 0; ask2[1] = c; ask2[2] = a; ask2[3] = d; int aux = use_machine(ask2); if(aux == 0){ ans[c] = 1; ans[d] = 1; } else if(aux == 1){ ans[c] = 1; ans[d] = 0; } else if(aux == 2){ ans[c] = 0; ans[d] = 1; } else if(aux == 3){ ans[c] = 0; ans[d] = 0; } } if(!fila.empty()){ int c = fila.front(); fila.pop(); vector<int> ask2 (2); ask2[0] = 0; ask2[1] = c; int aux = use_machine(ask2); if(aux == 0) ans[c] = 1; if(aux == 1) ans[c] = 0; } int ret = 0; for(int i = 0; i < n; i++) ret += ans[i]; return ret; }
#Verdict Execution timeMemoryGrader output
Fetching results...