Submission #1149166

#TimeUsernameProblemLanguageResultExecution timeMemory
1149166duckindogBroken Device (JOI17_broken_device)C++17
0 / 100
20 ms1344 KiB
#include <bits/stdc++.h>

using namespace std;

#include "Annalib.h"

void Anna( int N, long long X, int K, int P[] ){
  vector<int> per(N); iota(per.begin(), per.end(), 0);
  shuffle(per.begin(), per.end(), mt19937_64(149973));
  
  vector<bool> work(N, true);  
  for (int i = 0; i < K; ++i) 
    work[P[i]] = false;

  vector<int> num;
  { // decompose x into base 3
    while (X) { 
      num.push_back(X % 3);
      X /= 3;
    }
    while (num.size() < 38) num.push_back(0);
  }

  auto chk = [&](int pos0, int pos1, int value) { 
    int statePos = (pos0 << 1) | (pos1 << 0);
    int stateVal = value + 1;
    return (statePos & stateVal) == statePos;
  };

  for (int i = 0; i < N; i += 2) {
    int pos0 = per[i], pos1 = per[i + 1];
    
    if (!chk(pos0, pos1, num.back())) {
      Set(pos0, 0);
      Set(pos1, 0);
      continue;
    }
    Set(pos0, (num.back() + 1) >> 1 & 1);
    Set(pos1, (num.back() + 1) & 1);
    num.pop_back();
  }
}
#include <bits/stdc++.h>

using namespace std;

#include "Brunolib.h"

long long Bruno( int N, int A[] ){
  vector<int> per(N); iota(per.begin(), per.end(), 0);
  shuffle(per.begin(), per.end(), mt19937_64(149973));

  long long X = 0;
  for (int i = 0; i < N; i += 2) { 
    int pos0 = per[i], pos1 = per[i + 1];
    if (!pos0 && !pos1) continue;
    
    int value = ((pos0 << 1) | (pos1 << 0)) - 1;
    X = X * 3 + value;
  }

  return X;
}
#Verdict Execution timeMemoryGrader output
Fetching results...