Submission #1057094

#TimeUsernameProblemLanguageResultExecution timeMemory
1057094vjudge1Rarest Insects (IOI22_insects)C++17
99.83 / 100
185 ms1124 KiB
#include "insects.h" #include <bits/stdc++.h> using namespace std; using vi = vector<int>; using ii = pair<int, int>; set<int> Cur, Vreau; void movein2(int v) { Vreau.insert(v); } void moveout2(int v) { Vreau.erase(v); } int press2() { vi scos, add; for(auto it : Cur) { if(!Vreau.count(it)) scos.push_back(it); } for(auto it : Vreau) if(!Cur.count(it)) add.push_back(it); for(auto it : add) move_inside(it); for(auto it : scos) move_outside(it); Cur = Vreau; return press_button(); } int min_cardinality(int n) { int d = 0; vi Cul; for(int i = 0; i < n; ++i) { movein2(i); if(press2() == 1) { Cul.push_back(i); ++d; } else moveout2(i); } for(auto it : Cul) moveout2(it); int re = 0; int st = 1, dr = n / d, mij; set<int> S; for(int i = 0; i < n; ++i) S.insert(i); while(st < dr) { mij = (st + dr + 1) / 2; if(d > S.size()) { st = dr = 0; break; // exista 0! } set<int> I; for(auto it : S) { if(I.size() == d * mij) break; movein2(it); if(press2() == mij + 1) { moveout2(it); } else { I.insert(it); } } if(I.size() == d * mij) { for(auto it : I) { S.erase(it); } re += mij; st = 0; dr = dr - mij; } else { dr = mij - 1; S = I; } for(auto it : I) moveout2(it); } return re + st; }

Compilation message (stderr)

insects.cpp: In function 'int min_cardinality(int)':
insects.cpp:51:14: warning: comparison of integer expressions of different signedness: 'int' and 'std::set<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   51 |         if(d > S.size()) {
      |            ~~^~~~~~~~~~
insects.cpp:57:25: warning: comparison of integer expressions of different signedness: 'std::set<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   57 |             if(I.size() == d * mij) break;
      |                ~~~~~~~~~^~~~~~~~~~
insects.cpp:66:21: warning: comparison of integer expressions of different signedness: 'std::set<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   66 |         if(I.size() == d * mij) {
      |            ~~~~~~~~~^~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...