#include "insects.h"
#include<bits/stdc++.h>
using namespace std;
const int N = 2010;
int cnt[N];
vector <int> rep;
set <int> simulate;
void moveinside(int pos){
if(simulate.find(pos) != simulate.end())
return;
simulate.insert(pos);
move_inside(pos);
}
void moveoutside(int pos){
if(simulate.find(pos) == simulate.end())
return;
simulate.erase(pos);
move_outside(pos);
}
void solve(int l, int r, vector <int> ask){
if(l == r){
cnt[rep[l]] = ask.size()+1;
return;
}
// quero que [l, mid] ja esteja na maquina
vector <int> v1, v2;
int mid = (l+r)/2;
for(int i = mid+1;i <= r;i++){
moveoutside(rep[i]);
}
for(auto x : ask){
moveinside(x);
int val = press_button();
moveoutside(x);
if(val > 1) v1.push_back(x);
else v2.push_back(x);
}
solve(l, mid, v1);
for(int i = l;i <= r;i++){
if(i <= mid){
moveoutside(rep[i]);
}
else{
moveinside(rep[i]);
}
}
solve(mid+1, r, v2);
return;
}
int min_cardinality(int n) {
rep.push_back(0);
moveinside(0);
vector <int> at;
for(int i = 1;i < n;i++){
moveinside(i);
int v = press_button();
if(v > 1) {
moveoutside(i);
at.push_back(i);
}
else{
rep.push_back(i);
}
}
solve(0, rep.size()-1,at);
int ans = 1e9;
for(auto x : rep){
//cout << cnt[x] << ' ';
ans = min(ans, cnt[x]);
}
return ans;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |