Submission #1224718

#TimeUsernameProblemLanguageResultExecution timeMemory
1224718madamadam3Unscrambling a Messy Bug (IOI16_messy)C++20
70 / 100
1 ms588 KiB
#include "messy.h" #include <bits/stdc++.h> using namespace std; using vi = vector<int>; vector<char> to_base2(int idx) { vector<char> answer(3); for (int bit = 0; bit < 3; bit++) { if (idx & (1 << bit)) { answer[bit] = '1'; } else { answer[bit] = '0'; } } return answer; } vi restore_permutation(int n, int w, int r) { random_device rd; mt19937 engine(rd()); vi indices(n); iota(indices.begin(), indices.end(), 0); shuffle(indices.begin(), indices.end(), engine); string ZEROS = ""; for (int i = 0; i < n; i++) ZEROS += "0"; string ONES = ""; for (int i = 0; i < n; i++) ONES += "1"; string cur = ZEROS; for (int idx = 0; idx < 3; idx++) { int i = indices[idx]; cur[i] = '1'; add_element(cur); } for (int idx = 3; idx < n; idx++) { int i = indices[idx]; for (int bit = 0; bit < 7; bit++) { cur = ONES; cur[i] = '0'; if (!(i & (1 << bit))) continue; vector<char> enc = to_base2(bit); for (int k = 0; k < 3; k++) { cur[indices[k]] = enc[k]; } add_element(cur); } } compile_set(); vi ans(n, -1); string test_str = ZEROS; vi lls; for (int bi = 0; bi < 3; bi++) { int bit = indices[bi]; vi next_indices; for (int i = 0; i < n; i++) if (test_str[indices[i]] == '0' && ans[indices[i]] == -1) next_indices.push_back(indices[i]); bool found = false; for (int lo = 0; lo < next_indices.size()-1; lo++) { int loc = next_indices[lo]; test_str[loc] = '1'; if (check_element(test_str)) { ans[loc] = bit; found = true; lls.push_back(loc); break; } test_str[loc] = '0'; } if (!found) { test_str[next_indices.back()] = '1'; ans[next_indices.back()] = bit; lls.push_back(next_indices.back()); } } vi value(n, 0); value[lls[0]] = indices[0]; value[lls[1]] = indices[1]; value[lls[2]] = indices[2]; for (int idx = 0; idx < n; idx++) { int i = indices[idx]; if (i == lls[0] || i == lls[1] || i == lls[2]) continue; for (int bit = 0; bit < 7; bit++) { cur = ONES; cur[i] = '0'; vector<char> enc = to_base2(bit); for (int k = 0; k < 3; k++) { cur[lls[k]] = enc[k]; } if (check_element(cur)) { value[i] |= (1 << bit); } } } for (int idx = 0; idx < n; idx++) { int i = indices[idx]; ans[value[i]] = i; } return value; }

Compilation message (stderr)

messy.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
messy_c.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
#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...