Submission #627345

# Submission time Handle Problem Language Result Execution time Memory
627345 2022-08-12T13:13:58 Z Cross_Ratio Rarest Insects (IOI22_insects) C++17
0 / 100
69 ms 1312 KB
#include "insects.h"
#include <bits/stdc++.h>
using namespace std;
map<int,set<int>> MS;
void move_inside(int);
void move_outside(int);
int press_button();
int min_cardinality(int N) {
    int i, j;
    set<int> S;
    move_inside(0);
    S.insert(0);
    for(i=1;i<N;i++) {
        move_inside(i);
        S.insert(i);
        int c = press_button();
        if(c >= 2) {
            move_outside(i);
            S.erase(i);
        }
    }
    int k = S.size();
    MS[1] = S;
    int s = 1, e = N/k+1;
    if(e==s+1) return s;
    int mid = (s+e)/2;
    for(i=0;i<N;i++) {
        if(S.find(i)==S.end()) {
            move_inside(i);
            S.insert(i);
            int c = press_button();
            if(c >= mid+1) {
                move_outside(i);
                S.erase(i);
            }
            if(S.size()==k*mid) break;
        }
        if(S.size()==k*mid) break;
    }
    MS[mid] = S;
    while(s+1<e) {
        int mid = (s+e)/2;
        if(S.size()==k*mid) {
            s = mid;
            if(mid+1>=e) break;
            mid = (s+e)/2;
            for(i=0;i<N;i++) {
                if(S.find(i)==S.end()) {
                    move_inside(i);
                    S.insert(i);
                    int c = press_button();
                    if(c >= mid+1) {
                        move_outside(i);
                        S.erase(i);
                    }
                    if(S.size()==k*mid) break;
                }
                if(S.size()==k*mid) break;
            }
            MS[mid] = S;
        }
        else {
            e = mid;
            if(s+1>=e) break;
            mid = (s+e)/2;
            auto it = MS.upper_bound(e);
            it--;
            set<int> S2 = it->second;
            for(i=0;i<N;i++) {
                if(S2.find(i)!=S2.end()&&S.find(i)==S.end()) {
                    move_inside(i);
                    S.insert(i);
                }
                if(S2.find(i)==S2.end()&&S.find(i)!=S.end()) {
                    move_outside(i);
                    S.erase(i);
                }
            }
            for(i=0;i<N;i++) {
                if(S.find(i)==S.end()) {
                    move_inside(i);
                    S.insert(i);
                    int c = press_button();
                    if(c >= mid+1) {
                        move_outside(i);
                        S.erase(i);
                    }
                    if(S.size()==k*mid) break;
                }
                if(S.size()==k*mid) break;
            }
            MS[mid] = S;
        }
    }
    return s;
}


Compilation message

insects.cpp: In function 'int min_cardinality(int)':
insects.cpp:36:24: warning: comparison of integer expressions of different signedness: 'std::set<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   36 |             if(S.size()==k*mid) break;
      |                ~~~~~~~~^~~~~~~
insects.cpp:38:20: warning: comparison of integer expressions of different signedness: 'std::set<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   38 |         if(S.size()==k*mid) break;
      |            ~~~~~~~~^~~~~~~
insects.cpp:43:20: warning: comparison of integer expressions of different signedness: 'std::set<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   43 |         if(S.size()==k*mid) {
      |            ~~~~~~~~^~~~~~~
insects.cpp:56:32: warning: comparison of integer expressions of different signedness: 'std::set<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   56 |                     if(S.size()==k*mid) break;
      |                        ~~~~~~~~^~~~~~~
insects.cpp:58:28: warning: comparison of integer expressions of different signedness: 'std::set<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   58 |                 if(S.size()==k*mid) break;
      |                    ~~~~~~~~^~~~~~~
insects.cpp:88:32: warning: comparison of integer expressions of different signedness: 'std::set<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   88 |                     if(S.size()==k*mid) break;
      |                        ~~~~~~~~^~~~~~~
insects.cpp:90:28: warning: comparison of integer expressions of different signedness: 'std::set<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   90 |                 if(S.size()==k*mid) break;
      |                    ~~~~~~~~^~~~~~~
insects.cpp:9:12: warning: unused variable 'j' [-Wunused-variable]
    9 |     int i, j;
      |            ^
# Verdict Execution time Memory Grader output
1 Correct 0 ms 208 KB Output is correct
2 Correct 0 ms 208 KB Output is correct
3 Correct 1 ms 208 KB Output is correct
4 Correct 0 ms 208 KB Output is correct
5 Correct 0 ms 208 KB Output is correct
6 Correct 3 ms 336 KB Output is correct
7 Correct 2 ms 208 KB Output is correct
8 Correct 5 ms 300 KB Output is correct
9 Incorrect 6 ms 208 KB Wrong answer.
10 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 208 KB Output is correct
2 Correct 0 ms 208 KB Output is correct
3 Correct 1 ms 208 KB Output is correct
4 Correct 0 ms 208 KB Output is correct
5 Correct 0 ms 208 KB Output is correct
6 Correct 3 ms 336 KB Output is correct
7 Correct 2 ms 208 KB Output is correct
8 Correct 5 ms 300 KB Output is correct
9 Incorrect 6 ms 208 KB Wrong answer.
10 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 208 KB Output is correct
2 Correct 0 ms 256 KB Output is correct
3 Correct 0 ms 208 KB Output is correct
4 Correct 0 ms 208 KB Output is correct
5 Correct 1 ms 208 KB Output is correct
6 Correct 0 ms 208 KB Output is correct
7 Correct 38 ms 1312 KB Output is correct
8 Correct 16 ms 348 KB Output is correct
9 Correct 46 ms 808 KB Output is correct
10 Partially correct 35 ms 680 KB Output is partially correct
11 Incorrect 69 ms 512 KB Wrong answer.
12 Halted 0 ms 0 KB -