이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "insects.h"
#include <bits/stdc++.h>
using namespace std;
#define ff first
#define ss second
#define all(a) (a).begin(), (a).end()
#define ll long long
const int mod = 1000002022;
vector<int> state, p;
int n, m;
vector<vector<int>> g;
template<typename T>
int len(T &a){return a.size();}
mt19937 rng(chrono::high_resolution_clock::now().time_since_epoch().count());
void shuffle(vector<int> &a, int n){
if(n == 1) return;
random_shuffle(a.begin(), a.begin() + n);
for(int i = 0; i < n; i ++){
int aa = rng() % n, bb = rng() % n;
while(bb == aa) bb = rng() % n;
swap(a[aa], a[bb]);
}
}
int min_cardinality(int n) {
vector<int> v;
vector<int> done(n);
vector<int> ind(n);
iota(all(ind), 0);
shuffle(ind, n);
for(int i = 0; i < n; i ++){
move_inside(ind[i]);
if(press_button() == 2){
move_outside(ind[i]);
}else v.push_back(ind[i]), done[ind[i]] = 1;
}
if(len(v) == 1){
return n;
}
int dis = len(v);
int l = 1, r = n / dis + 1;
ll cnt = dis;
auto check = [&](int m)->bool{
vector<int> rem;
vector<int> rem2;
for(int i = 0; i < n; i ++){
if(done[ind[i]]) continue;
move_inside(ind[i]);
if(press_button() <= m){
rem.push_back(ind[i]);
}else{
move_outside(ind[i]);
rem2.push_back(ind[i]);
}
}
if(cnt + len(rem) == dis * m){
for(auto u : rem) done[u] = 1;
cnt += len(rem);
return true;
}else{
for(auto u : rem) move_outside(u);
for(auto u : rem2) done[u] = 1;
return false;
}
};
while(r - l > 1){
int m = (l + r) / 2;
if(check(m)){
l = m;
}else r = m;
}
return l;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |