제출 #1078144

#제출 시각아이디문제언어결과실행 시간메모리
1078144Faisal_Saqib드문 곤충 (IOI22_insects)C++17
25 / 100
881 ms81044 KiB
#include <bits/stdc++.h> using namespace std; void move_inside(int i); void move_outside(int i); int press_button(); map<vector<int>,int> store; vector<int> cur,real_; void add(int i) { i--; cur.push_back(i); move_inside(i); } void rem(int i) { i--; cur.pop_back(); move_outside(i); } void khatam() { for(auto i:cur) move_outside(i); cur.clear(); } int ask() { if(store.find(cur)!=store.end())return store[cur]; // for(auto&i:cur) // { // if(!binary_search(begin(real_),end(real_),i)) // { // move_inside(i); // } // } // for(auto&j:real_) // { // if(!binary_search(begin(cur),end(cur),j)) // { // move_outside(j); // } // } // real_=cur; store[cur]=press_button(); // cout<<"asking \n"; // cout<<"For: "; // for(auto i:cur) // { // cout<<i<<' '; // } // cout<<endl; // cout<<"Ans: "<<store[cur]<<endl; return store[cur]; } int min_cardinality(int n) { vector<int> heads={1}; add(1); for(int i=2;i<=n;i++) { add(i); if(ask()==1) heads.push_back(i); else rem(i); } int sz=heads.size(),np=n; while(1) { int mid=(np)/sz; // cout<<"Checking "<<np<<' '<<sz<<endl; // cout<<mid<<endl; khatam(); int sm=0; for(int i=1;i<=mid;i++) add(i),sm++; for(int j=mid+1;j<=n;j++) { add(j); if(ask()>mid) { rem(j); } else{ sm++; if(sm==(sz*mid)) { break; } } } // cout<<"Result "<<sm<<endl; if(sm==((sz*mid))) { return mid; // this is the answer } else{ np=sm; } } return -1; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...