제출 #58728

#제출 시각아이디문제언어결과실행 시간메모리
58728ksun48도서관 (JOI18_library)C++14
100 / 100
806 ms780 KiB
#include "library.h" #include <bits/stdc++.h> using namespace std; int check(int n, int a, int b){ vector<int> ask(n, 0); ask[a] = ask[b] = 1; if(Query(ask) == 1){ return 1; } return 0; } void Solve(int N) { int n = N; vector<vector<int> > groups; for(int i = 0; i < n; i++){ groups.push_back({i}); } while(groups.size() > 1){ vector<int> inside; for(int j = 0; j < groups.size(); j++){ inside.push_back(j); } while(inside.size() > 2){ vector<int> newinside; int bb = min((int)inside.size() - 1, max(2, 2 * (int)sqrt(inside.size()) ) ); //cout << inside.size() << " " << bb << endl; random_shuffle(inside.begin(), inside.end()); for(int i = 0; i < bb; i++){ newinside.push_back(inside[i]); } vector<int> ask(n, 0); for(int x : newinside){ for(int a : groups[x]){ ask[a] = 1; } } int b = Query(ask); //assert(b <= newn1); if(b < bb){ inside = newinside; } } vector<vector<int> > newgroups; vector<vector<int> > good; for(int i = 0; i < groups.size(); i++){ if(i != inside[0] && i != inside[1]){ newgroups.push_back(groups[i]); } else { good.push_back(groups[i]); } } vector<int> ans; if(check(n, good[0][0], good[1][0])){ reverse(good[0].begin(), good[0].end()); } else if(check(n, good[0][good[0].size() - 1], good[1][0])){ } else if(check(n, good[0][0], good[1][good[1].size()-1])){ reverse(good[0].begin(), good[0].end()); reverse(good[1].begin(), good[1].end()); } else if(check(n, good[0][good[0].size() - 1], good[1][good[1].size() - 1])){ reverse(good[1].begin(), good[1].end()); } else { //assert(0); } ans.insert(ans.end(), good[0].begin(), good[0].end()); ans.insert(ans.end(), good[1].begin(), good[1].end()); newgroups.push_back(ans); groups = newgroups; } vector<int> ans = groups[0]; for(int j = 0; j < ans.size(); j++){ ans[j]++; //cout << ans[j] << " "; } //cout << endl; Answer(ans); }

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

library.cpp: In function 'void Solve(int)':
library.cpp:22:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int j = 0; j < groups.size(); j++){
                  ~~^~~~~~~~~~~~~~~
library.cpp:48:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int i = 0; i < groups.size(); i++){
                  ~~^~~~~~~~~~~~~~~
library.cpp:73:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int j = 0; j < ans.size(); j++){
                 ~~^~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...