Submission #1145365

#TimeUsernameProblemLanguageResultExecution timeMemory
1145365lightentheshadowLibrary (JOI18_library)C++20
100 / 100
120 ms432 KiB
#include <bits/stdc++.h> #include "library.h" using namespace std; bool found[1005]; void Solve(int n) { vector<int> ans; ans.clear(); if (n <= 2) { for (int i = 1; i <= n; i++) ans.push_back(i); Answer(ans); return ; } vector<int> ask; for (int i = 1; i <= n; i++) ask.push_back(0); /// Find one of the sides for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) if (j == i) ask[j - 1] = 0; else ask[j - 1] = 1; int res = Query(ask); if (res == 1) { ans.push_back(i); found[i] = 1; break; } } /// Find other ones vector<int> contender, A, B; for (int turn = 2; turn <= n; turn++) { contender.clear(); for (int i = 1; i <= n; i++) if (!found[i]) contender.push_back(i); while (contender.size() > 1) { A.clear(); B.clear(); /// Split two sides for (int i = 0; i < contender.size(); i++) { if (i % 2) A.push_back(contender[i]); else B.push_back(contender[i]); } /// Ask set A for (int i = 0; i < n; i++) ask[i] = 0; for (auto x: A) ask[x - 1] = 1; int res = Query(ask); ask[ans.back() - 1] = 1; int res2 = Query(ask); if (res == res2) contender = A; else contender = B; } ans.push_back(contender[0]); found[contender[0]] = 1; } Answer(ans); return ; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...