Submission #1194254

#TimeUsernameProblemLanguageResultExecution timeMemory
1194254GabpUnscrambling a Messy Bug (IOI16_messy)C++20
100 / 100
1 ms584 KiB
#include<bits/stdc++.h>
#include"messy.h"
using namespace std;

struct Data {
  int l,r;
  vector<int> idx;

  Data(int n) {
    l = 0;
    r = n - 1;
    for (int i = 0; i < n; i++) idx.push_back(i);
  }
  
  Data(int l, int r, vector<int> idx) : l(l), r(r), idx(idx) {}
};

vector<int> restore_permutation(int n, int w, int r) {
  queue<pair<int,int>> q;
  q.push({0, n - 1});
  while (!q.empty()) {
    auto [start, end] = q.front(); q.pop();
    if (start == end) continue;
    string s(n, '1');
    for (int i = start; i <= end; i++) s[i] = '0';
    int mid = start + (end - start) / 2;
    for (int i = start; i <= mid; i++) {
      string t = s;
      t[i] = '1';
      add_element(t);
    }
    
    q.push({start, mid});
    q.push({mid + 1, end});
  }
  
  compile_set();
  
  queue<Data> q2;
  q2.push(Data(n));
  vector<int> ans(n);
  
  while (!q2.empty()) {
    auto curr = q2.front(); q2.pop();
    int start = curr.l, end = curr.r;
    if (start == end) {
      ans[curr.idx[0]] = start;
      continue;
    }
    
    vector<int> left, right;
    string s(n, '1');
    for (auto i: curr.idx) s[i] = '0';
    for (auto i: curr.idx) {
      string t = s;
      t[i] = '1';
      if (check_element(t)) left.push_back(i);
      else right.push_back(i);
    }
    
    int mid = start + (end - start) / 2;
    q2.push(Data(start, mid, left));
    q2.push(Data(mid + 1, end, right));
  }
  
  return ans;
}

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...