제출 #1078143

#제출 시각아이디문제언어결과실행 시간메모리
1078143Faisal_SaqibRarest Insects (IOI22_insects)C++17
25 / 100
1924 ms80940 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); } void rem(int i) { i--; cur.pop_back(); } void khatam() { 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...