Submission #1206469

#TimeUsernameProblemLanguageResultExecution timeMemory
1206469dostsMachine (IOI24_machine)C++20
69 / 100
3 ms444 KiB
#include "machine.h"
#include <bits/stdc++.h>
#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx2")
//#define int long long
#define pii pair<int,int>
#define vi vector<int>
#define ff first
#define ss second
#define sp << " " <<
#define all(x) x.begin(),x.end()
#define big(x) ((int)(x.size()))
using namespace std;
const int MOD = 1e9+7, LIM = 1e6+1, inf = 2e9;



int compat(vi a,vi b) {
    int xr = 0;
    for (auto it : a) xr^=it;
    for (auto it : b) xr^=it;
    vi v1;
    for (auto it : a) v1.push_back(it^xr);
    sort(all(v1));
    if (v1 == b) return xr;
    return -1;
}
std::vector<int> find_permutation(int N) {
  if (N%2) {
    vi ask;
    for (int i = 0;i<N;i++) ask.push_back(i);
    vi A = use_machine(ask);
    int xr = 0;
    for (int i = 0;i<N;i++) xr^=i;
    for (int i = 0;i<N;i++) xr^=A[i];
    vi ans(N);
    for (int i = 0;i<N;i++) ans[i] = A[i]^xr;
    return ans;
  }
  else {
    int pw = 1;
    while (pw < N) pw*=2;
    vi ask;
    for (int i = 0;i<N-1;i++) ask.push_back(i);
    ask.push_back(pw);
    vi A= use_machine(ask);
    int xr = 0; 
    for (auto it: ask) if (!(it&pw))xr^=it;
    int has = 0,no = 0;
    for (auto it : A) {
      if (it&pw) has++;
      else no++;
    }
    for (auto it : A) {
      if ((it&pw) && has > no) xr^=it;
      else if ((!(it&pw)) && no > has) xr^=it;
    }
    vi ans(N);
    vi got(N,0);
    for (int i = 0;i<N;i++) {
      if ((A[i]^xr) < N-1) ans[i] = A[i]^xr,got[ans[i]] = 1;
    }
    int leftout=0;
    for (int i = 0;i<N;i++) if (!got[i]) leftout = i;
    for (int i = 0;i<N;i++){
      if ((A[i]^xr) < N-1) continue;
      ans[i] = leftout;
    }
    return ans;
  }
}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...