Submission #1057087

#TimeUsernameProblemLanguageResultExecution timeMemory
1057087vjudge1드문 곤충 (IOI22_insects)C++17
99.56 / 100
299 ms876 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 = 0, 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) {
            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:65:21: warning: comparison of integer expressions of different signedness: 'std::set<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   65 |         if(I.size() == d * mij) {
      |            ~~~~~~~~~^~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...