제출 #940760

#제출 시각아이디문제언어결과실행 시간메모리
940760SundavarMonster Game (JOI21_monster)C++17
93 / 100
72 ms4908 KiB
#include "monster.h" #include <bits/stdc++.h> using namespace std; mt19937 rng(11); vector<vector<int> > m(1000, vector<int>(1000, -1)); bool ask(int a, int b){ if(m[a][b] == -1){ m[a][b] = Query(a,b); m[b][a] = 1 - m[a][b]; } return m[a][b]; } vector<int> solve2(vector<int> v){ if(v.size() == 1) return v; vector<int> left, right; for(int i = 0; i < v.size(); i++) if(i < v.size()/2) left.push_back(v[i]); else right.push_back(v[i]); left = solve2(left), right = solve2(right); vector<int> res; /*for(int& a : left) cout << a << " "; cout << "\n"; for(int& a : right) cout << a << " "; cout << "\n"; cout << "\n";*/ for(int l = 0, r = 0; l < left.size() || r < right.size();){ if(r == right.size() || (l < left.size() && ask(right[r], left[l]))) res.push_back(left[l++]); else res.push_back(right[r++]); } return res; } void correct_long(vector<int>& v, int i){ int l = 1; while(i+l+1 < v.size() && ask(v[i], v[i+l+1])) l++; for(int j = 0; j < (l+1)/2; j++) swap(v[i+j], v[i+l-j]); } void correct_v(vector<int>& v, int i){ int l = 1; while(i+l < v.size() && !ask(v[i-1], v[i+l])) l++; for(int j = 0; j < (l+1)/2; j++) swap(v[i+j], v[i+l-j]); } std::vector<int> Solve(int N) { vector<int> v; for(int i = 0; i < N ; i++) v.push_back(i); shuffle(v.begin(), v.end(), rng); v = solve2(v); /*for(int& a : v) cout<<a<<" "; cout << "\n";*/ int cnt = 0, j = 0; for(int i = 1; i < N; i++){ cnt += ask(v[0], v[i]); if(cnt > 1) break; } if(cnt != 1){ correct_long(v, 0); } if(cnt == 1 && !ask(v[0], v[1])){ int cnt2 = 0; for(int i = 0; i < N; i++) if(i != 1){ cnt2 += ask(v[1], v[i]); if(cnt2 > 1) break; } if(cnt2 == 1) swap(v[0], v[1]); } for(int i = 0; i < N-1; i++){ if(!ask(v[i], v[i+1])){ correct_v(v, i+1); /*for(int& a : v) cout<<a<<" "; cout << "\n";*/ } } /*for(int& a : v) cout<<a<<" "; cout << "\n";*/ vector<int> T(N); for(int i = 0; i < N; i++) T[v[i]] = i; return T; }

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

monster.cpp: In function 'std::vector<int> solve2(std::vector<int>)':
monster.cpp:18:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   18 |   for(int i = 0; i < v.size(); i++)
      |                  ~~^~~~~~~~~~
monster.cpp:19:10: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   19 |     if(i < v.size()/2) left.push_back(v[i]);
      |        ~~^~~~~~~~~~~~
monster.cpp:28:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   28 |   for(int l = 0, r = 0; l < left.size() || r < right.size();){
      |                         ~~^~~~~~~~~~~~~
monster.cpp:28:46: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   28 |   for(int l = 0, r = 0; l < left.size() || r < right.size();){
      |                                            ~~^~~~~~~~~~~~~~
monster.cpp:29:10: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   29 |     if(r == right.size() || (l < left.size() && ask(right[r], left[l]))) res.push_back(left[l++]);
      |        ~~^~~~~~~~~~~~~~~
monster.cpp:29:32: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   29 |     if(r == right.size() || (l < left.size() && ask(right[r], left[l]))) res.push_back(left[l++]);
      |                              ~~^~~~~~~~~~~~~
monster.cpp: In function 'void correct_long(std::vector<int>&, int)':
monster.cpp:37:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   37 |   while(i+l+1 < v.size() && ask(v[i], v[i+l+1])) l++;
      |         ~~~~~~^~~~~~~~~~
monster.cpp: In function 'void correct_v(std::vector<int>&, int)':
monster.cpp:43:13: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   43 |   while(i+l < v.size() && !ask(v[i-1], v[i+l])) l++;
      |         ~~~~^~~~~~~~~~
monster.cpp: In function 'std::vector<int> Solve(int)':
monster.cpp:55:16: warning: unused variable 'j' [-Wunused-variable]
   55 |   int cnt = 0, j = 0;
      |                ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...