Submission #830910

#TimeUsernameProblemLanguageResultExecution timeMemory
830910FatihSolakRarest Insects (IOI22_insects)C++17
99.89 / 100
55 ms552 KiB
#include "insects.h" #include <bits/stdc++.h> using namespace std; int min_cardinality(int N){ mt19937 rng(chrono::steady_clock().now().time_since_epoch().count()); vector<int> ord; for(int i = 0;i<N;i++){ ord.push_back(i); } shuffle(ord.begin(),ord.end(),rng); vector<int> v; int now = 0; int dif = 0; auto add = [&](int x){ v.push_back(x); move_inside(ord[x]); now = press_button(); }; auto del = [&](){ move_outside(ord[v.back()]); v.pop_back(); now = press_button(); }; auto del2 = [&](){ move_outside(ord[v.back()]); v.pop_back(); now--; }; auto del3 = [&](){ move_outside(ord[v.back()]); v.pop_back(); }; add(0); dif = 1; for(int i = 1;i<N;i++){ add(i); if(now == 2){ del2(); } else dif++; } if(dif <= 3){ vector<bool> found(N,0); int mini = 1e9; int rem = N; for(int i = 0;i<N && dif > 1;i++){ if(found[i] == 0){ dif--; while(v.size()) del3(); now = 0; int cnt = 0; for(int j = 0;j<N;j++){ if(found[j])continue; add(j); if(now != cnt + 1){ del3(); } else{ found[j] = 1; cnt++; rem--; } } mini = min(mini,cnt); } } mini = min(mini,rem); return mini; } vector<int> ban(N,0); int l = 1,r = N/dif; int ext = 0; while(l < r){ int m = (l + r + 1)/2; if(now < m-ext){ for(int i = 0;i<N;i++){ if(ban[i] == 0 && find(v.begin(),v.end(),i) == v.end()){ add(i); if(now > m - ext) del2(); } } } else{ while(v.size()){ del3(); } now = 0; for(int i = 0;i<N;i++){ if(ban[i] == 0 && find(v.begin(),v.end(),i) == v.end()){ add(i); if(now > m - ext) del2(); } } } if(v.size() == (m-ext) * dif){ for(auto u:v){ ban[u] = 1; } while(v.size()) del3(); now = 0; ext = m; l = m; } else{ r = m -1; for(int i = 0;i<N;i++){ if(find(v.begin(),v.end(),i) == v.end()){ ban[i] = 1; } } } } return l; }

Compilation message (stderr)

insects.cpp: In function 'int min_cardinality(int)':
insects.cpp:99:15: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   99 |   if(v.size() == (m-ext) * dif){
      |      ~~~~~~~~~^~~~~~~~~~~~~~~~
insects.cpp:20:7: warning: variable 'del' set but not used [-Wunused-but-set-variable]
   20 |  auto del = [&](){
      |       ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...