Submission #963230

# Submission time Handle Problem Language Result Execution time Memory
963230 2024-04-14T19:03:02 Z hyakup Unscrambling a Messy Bug (IOI16_messy) C++17
100 / 100
2 ms 856 KB
#include <bits/stdc++.h>
#include "messy.h"
using namespace std;
#define bug(x) cout << #x << " " << x << endl;

// void add_element( string& s ){
//   cout << "ADD: " << s << endl;
// }
// void compile_set(){
//
// }
// int check_element(string& s ){
//   cout << "CHECK: " << s << endl;
//   int x; cin >> x; return x;
// }

void add( int ini, int fim, int n ){
  if( ini == fim ) return;
  string base;
  for( int i = 0; i < n; i++ ){
    if( i < ini || fim < i ) base.push_back('1');
    else base.push_back('0');
  }
  int mid = ( ini + fim )/2;
  for( int i = ini; i <= mid; i++ ){
    base[i] = '1';
    add_element(base);
    base[i] = '0';
  }
  add( ini, mid, n ); add( mid + 1, fim, n );
}

void solve( int ini, int fim, int n, vector<int>& known, vector<int>& unknown, vector<int>& resp ){
  if( ini == fim ){ resp[unknown.back()] = ini; return; }
  string base;
  for( int i = 0; i < n; i++ ) base.push_back('0');
  for( int x : known ) base[x] = '1';
  vector<int> kl, kr, ul, ur;
  for( int x : known ){ kl.push_back(x); kr.push_back(x); }
  int mid = ( ini + fim )/2;
  for( int x : unknown ){
    base[x] = '1';
    if( check_element(base) ){
      ul.push_back(x);
      kr.push_back(x);
    }
    else{
      ur.push_back(x);
      kl.push_back(x);
    }
    base[x] = '0';
  }
  solve( ini, mid, n, kl, ul, resp ); solve( mid + 1, fim, n, kr, ur, resp );
}

vector<int> restore_permutation(int n, int w, int r){
  add(0, n - 1, n);
  compile_set();
  vector<int> resp(n), known, unknown;
  for( int i = 0; i < n; i++ ) unknown.push_back(i);
  solve( 0, n - 1, n, known, unknown, resp );
  return resp;
}

// int main(){
//   int n; cin >> n;
//   vector<int> v = restore_permutation(n, 40, 40);
//   cout << "V: ";
//   for( int x : v ) cout << x << " ";
// }
# Verdict Execution time Memory Grader output
1 Correct 1 ms 348 KB n = 8
2 Correct 0 ms 348 KB n = 8
3 Correct 0 ms 348 KB n = 8
4 Correct 0 ms 348 KB n = 8
5 Correct 0 ms 348 KB n = 8
6 Correct 1 ms 500 KB n = 8
7 Correct 0 ms 348 KB n = 8
8 Correct 1 ms 348 KB n = 8
9 Correct 1 ms 348 KB n = 8
10 Correct 1 ms 348 KB n = 8
11 Correct 1 ms 348 KB n = 8
12 Correct 1 ms 348 KB n = 8
13 Correct 0 ms 348 KB n = 8
14 Correct 1 ms 348 KB n = 8
15 Correct 0 ms 348 KB n = 8
# Verdict Execution time Memory Grader output
1 Correct 1 ms 344 KB n = 32
2 Correct 1 ms 496 KB n = 32
3 Correct 1 ms 604 KB n = 32
4 Correct 1 ms 348 KB n = 32
5 Correct 1 ms 344 KB n = 32
6 Correct 0 ms 348 KB n = 32
7 Correct 0 ms 348 KB n = 32
8 Correct 0 ms 348 KB n = 32
9 Correct 0 ms 344 KB n = 32
10 Correct 1 ms 348 KB n = 32
11 Correct 0 ms 348 KB n = 32
12 Correct 1 ms 348 KB n = 32
13 Correct 0 ms 348 KB n = 32
14 Correct 1 ms 344 KB n = 32
15 Correct 1 ms 348 KB n = 32
# Verdict Execution time Memory Grader output
1 Correct 1 ms 344 KB n = 32
2 Correct 1 ms 344 KB n = 32
3 Correct 1 ms 432 KB n = 32
4 Correct 0 ms 344 KB n = 32
5 Correct 1 ms 348 KB n = 32
6 Correct 1 ms 344 KB n = 32
7 Correct 1 ms 344 KB n = 32
8 Correct 1 ms 348 KB n = 32
9 Correct 1 ms 348 KB n = 32
10 Correct 0 ms 348 KB n = 32
11 Correct 1 ms 348 KB n = 32
12 Correct 1 ms 440 KB n = 32
13 Correct 0 ms 348 KB n = 32
14 Correct 1 ms 348 KB n = 32
15 Correct 1 ms 352 KB n = 32
# Verdict Execution time Memory Grader output
1 Correct 1 ms 608 KB n = 128
2 Correct 1 ms 604 KB n = 128
3 Correct 1 ms 604 KB n = 128
4 Correct 1 ms 432 KB n = 128
5 Correct 1 ms 604 KB n = 128
6 Correct 1 ms 604 KB n = 128
7 Correct 1 ms 608 KB n = 128
8 Correct 1 ms 604 KB n = 128
9 Correct 2 ms 608 KB n = 128
10 Correct 1 ms 608 KB n = 128
11 Correct 1 ms 608 KB n = 128
12 Correct 1 ms 440 KB n = 128
13 Correct 1 ms 608 KB n = 128
14 Correct 1 ms 436 KB n = 128
15 Correct 1 ms 608 KB n = 128
# Verdict Execution time Memory Grader output
1 Correct 2 ms 608 KB n = 128
2 Correct 2 ms 608 KB n = 128
3 Correct 1 ms 608 KB n = 128
4 Correct 2 ms 604 KB n = 128
5 Correct 1 ms 612 KB n = 128
6 Correct 2 ms 604 KB n = 128
7 Correct 1 ms 608 KB n = 128
8 Correct 1 ms 604 KB n = 128
9 Correct 1 ms 608 KB n = 128
10 Correct 2 ms 856 KB n = 128
11 Correct 2 ms 600 KB n = 128
12 Correct 1 ms 604 KB n = 128
13 Correct 1 ms 604 KB n = 128
14 Correct 1 ms 604 KB n = 128
15 Correct 1 ms 608 KB n = 128