Submission #428413

#TimeUsernameProblemLanguageResultExecution timeMemory
428413MazaalaiUnscrambling a Messy Bug (IOI16_messy)C++14
0 / 100
3 ms460 KiB
#include "messy.h" #include <bits/stdc++.h> using namespace std; int n; vector <int> ans; string defaultStr; void add(vector <int> ids) { string tmp = defaultStr; for (auto a : ids) tmp[a] = '1'; add_element(tmp); } int val; bool check(vector <int> ids) { string tmp = defaultStr; for (auto a : ids) tmp[a] = '1'; val = check_element(tmp); // cout << "ask " << tmp << ": " << val << '\n'; return val; } void init(int st, int end, vector<int>&use) { if (st == end) return; int mid = (st+end)/2; for (int i = mid+1; i <= end; i++) { vector <int> tmp = use; tmp.push_back(i); add(tmp); } //lowHalf for (int i = st; i <= mid; i++) { use.push_back(i); } init(mid+1, end, use); for (int i = st; i <= mid; i++) { use.pop_back(); } //upperHalf for (int i = mid+1; i <= end; i++) { use.push_back(i); } init(st, mid, use); for (int i = mid+1; i <= end; i++) { use.pop_back(); } } void solve(int st, int end, vector <int>&use) { // cout << st << ' ' << end << ": "; // for (auto el : use) cout << el << ' '; // cout << '\n'; if (st == end) { vector <bool> seen(n, 0); for (auto el : use) seen[el] = 1; for (int i = 0; i < n; i++) { if (!seen[i]) val = i; } ans[val] = st; return; } int mid = (st+end)/2; vector <int> lower, upper; for (int i = st; i <= end; i++) { vector <int> tmp = use; tmp.push_back(i); int cur = check(tmp); if (cur) upper.push_back(i); else lower.push_back(i); } //lowHalf for (int i = 0; i < lower.size(); i++) { use.push_back(lower[i]); } solve(mid+1, end, use); for (int i = 0; i < lower.size(); i++) { use.pop_back(); } //upperHalf for (int i = 0; i < upper.size(); i++) { use.push_back(upper[i]); } solve(st, mid, use); for (int i = 0; i < upper.size(); i++) { use.pop_back(); } } vector<int> restore_permutation(int n1, int w, int r) { n = n1; for (int i = 0; i < n; i++) ans.push_back(i); for (int i = 0; i < n; i++) defaultStr.push_back('0'); vector <int> use; init(0, n-1, use); compile_set(); // cout << "DONE\n"; solve(0, n-1, use); // check_element("0"); return ans; }

Compilation message (stderr)

messy.cpp: In function 'void solve(int, int, std::vector<int>&)':
messy.cpp:69:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   69 |     for (int i = 0; i < lower.size(); i++) {
      |                     ~~^~~~~~~~~~~~~~
messy.cpp:73:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   73 |     for (int i = 0; i < lower.size(); i++) {
      |                     ~~^~~~~~~~~~~~~~
messy.cpp:77:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   77 |     for (int i = 0; i < upper.size(); i++) {
      |                     ~~^~~~~~~~~~~~~~
messy.cpp:81:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   81 |     for (int i = 0; i < upper.size(); i++) {
      |                     ~~^~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...