제출 #1025194

#제출 시각아이디문제언어결과실행 시간메모리
1025194Wansur드문 곤충 (IOI22_insects)C++17
99.64 / 100
48 ms1108 KiB
#include <bits/stdc++.h>
#define ent '\n'

void move_inside(int i);
void move_outside(int i);
int press_button();

using namespace std;
typedef long long ll;
const int maxn = 1e5 + 12;

mt19937 rng(10223431);
bool used[maxn];
vector<int> p;
vector<int> d;
int n, m, c, cnt = 0;

bool check(int x){
    x -= cnt;
    vector<int> a, b;
    for(int i:p){
        if(used[i]) continue;
        move_inside(i);
        if(press_button() > x){
            move_outside(i);
            b.push_back(i);
        }
        else a.push_back(i);
        if(a.size() == x * m) break;
    }
    for(int x:a){
        move_outside(x);
    }
    if(a.size() == x * m){
        cnt += x;
        for(int x:a){
            used[x] = 1;
            c--;
        }
        return 1;
    }
    for(int x:b){
        used[x] = 1;
        c--;
    }
    return 0;
}

int min_cardinality(int N){
    n = N;
    c = n;
    for(int i=0;i<n;i++){
        p.push_back(i);
        move_inside(i);
        if(press_button() != 1){
            move_outside(i);
        }
        else m++;
    }
    for(int i=0;i<n;i++){
        swap(p[i], p[rng() % n]);
    }
    int ans = 0;
    for(int l = 1, r = (n + m - 1) / m; l <= r;){
        int mid = l + r >> 1;
        if(check(mid)){
            ans = mid;
            l = mid + 1;
        }
        else r = mid - 1;
    }
    return ans;
}

컴파일 시 표준 에러 (stderr) 메시지

insects.cpp: In function 'bool check(int)':
insects.cpp:29:21: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   29 |         if(a.size() == x * m) break;
      |            ~~~~~~~~~^~~~~~~~
insects.cpp:34:17: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   34 |     if(a.size() == x * m){
      |        ~~~~~~~~~^~~~~~~~
insects.cpp: In function 'int min_cardinality(int)':
insects.cpp:65:21: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   65 |         int mid = l + r >> 1;
      |                   ~~^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...