제출 #627359

#제출 시각아이디문제언어결과실행 시간메모리
627359Cross_Ratio드문 곤충 (IOI22_insects)C++17
53.16 / 100
153 ms1300 KiB
#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; vector<int> V; for(i=0;i<N;i++) V.push_back(i); random_shuffle(V.begin(),V.end()); int s = 1, e = N/k+1; if(e==s+1) return s; int mid = (s+e)/2; for(j=0;j<N;j++) { i = V[j]; 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(j=0;j<N;j++) { i = V[j]; if(S.size()==k*mid) break; 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(mid); 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(j=0;j<N;j++) { i = V[j]; 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; }

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

insects.cpp: In function 'int min_cardinality(int)':
insects.cpp:40:24: warning: comparison of integer expressions of different signedness: 'std::set<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   40 |             if(S.size()==k*mid) break;
      |                ~~~~~~~~^~~~~~~
insects.cpp:42:20: warning: comparison of integer expressions of different signedness: 'std::set<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   42 |         if(S.size()==k*mid) break;
      |            ~~~~~~~~^~~~~~~
insects.cpp:47:20: warning: comparison of integer expressions of different signedness: 'std::set<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   47 |         if(S.size()==k*mid) {
      |            ~~~~~~~~^~~~~~~
insects.cpp:53:28: warning: comparison of integer expressions of different signedness: 'std::set<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   53 |                 if(S.size()==k*mid) break;
      |                    ~~~~~~~~^~~~~~~
insects.cpp:62:32: warning: comparison of integer expressions of different signedness: 'std::set<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   62 |                     if(S.size()==k*mid) break;
      |                        ~~~~~~~~^~~~~~~
insects.cpp:64:28: warning: comparison of integer expressions of different signedness: 'std::set<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   64 |                 if(S.size()==k*mid) break;
      |                    ~~~~~~~~^~~~~~~
insects.cpp:95:32: warning: comparison of integer expressions of different signedness: 'std::set<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   95 |                     if(S.size()==k*mid) break;
      |                        ~~~~~~~~^~~~~~~
insects.cpp:97:28: warning: comparison of integer expressions of different signedness: 'std::set<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   97 |                 if(S.size()==k*mid) break;
      |                    ~~~~~~~~^~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...