Submission #284732

#TimeUsernameProblemLanguageResultExecution timeMemory
284732rama_pangBroken Device (JOI17_broken_device)C++14
100 / 100
52 ms3584 KiB
#include "Annalib.h"
#include <bits/stdc++.h>
using namespace std;

void Anna(int N, long long X, int K, int P[]) {
  vector<int> broken(N);
  for (int i = 0; i < K; i++) {
    broken[P[i]] = 1;
  }
  vector<int> bits;
  for (int i = 0; i < 61; i++) {
    bits.emplace_back(!!(X & (1ll << i)));
  }
  // 100 -> "0"
  // 001 -> "1"
  // 110 -> "1"
  // 010 -> "00"
  // 011 -> "01"
  // 101 -> "10"
  // 111 -> "11"
  vector<int> ans(N);
  for (int i = 0, j = 0; i < N && j < 60; i += 3) {
    int cnt = broken[i] + broken[i + 1] + broken[i + 2];
    if (cnt == 0) {
      if (bits[j] == 0 && bits[j + 1] == 0) {
        ans[i] = 0; ans[i + 1] = 1; ans[i + 2] = 0;
      } else if (bits[j] == 0 && bits[j + 1] == 1) {
        ans[i] = 0; ans[i + 1] = 1; ans[i + 2] = 1;
      } else if (bits[j] == 1 && bits[j + 1] == 0) {
        ans[i] = 1; ans[i + 1] = 0; ans[i + 2] = 1;
      } else if (bits[j] == 1 && bits[j + 1] == 1) {
        ans[i] = 1; ans[i + 1] = 1; ans[i + 2] = 1;
      }
      j += 2;
    } else if (cnt == 1) {
      if (bits[j] == 0) {
        if (!broken[i]) {
          ans[i] = 1; ans[i + 1] = 0; ans[i + 2] = 0;
          j += 1;
        } else {
          if (bits[j + 1] == 0) {
            ans[i] = 0; ans[i + 1] = 1; ans[i + 2] = 0;
          } else if (bits[j + 1] == 1) {
            ans[i] = 0; ans[i + 1] = 1; ans[i + 2] = 1;
          }
          j += 2;
        }
      } else if (bits[j] == 1) {
        if (!broken[i + 2]) {
          ans[i] = 0; ans[i + 1] = 0; ans[i + 2] = 1;
        } else {
          ans[i] = 1; ans[i + 1] = 1; ans[i + 2] = 0;
        }
        j += 1;
      }
    }
  }
  for (int i = 0; i < N; i++) {
    Set(i, ans[i]);
  }
}
#include "Brunolib.h"
#include <bits/stdc++.h>
using namespace std;

long long Bruno(int N, int A[]) {
  // 100 -> "0"
  // 001 -> "1"
  // 110 -> "1"
  // 010 -> "00"
  // 011 -> "01"
  // 101 -> "10"
  // 111 -> "11"
  vector<int> bits;
  for (int i = 0; i < N; i += 3) {
    if (A[i] == 1 && A[i + 1] == 0 && A[i + 2] == 0) {
      bits.emplace_back(0);
    } else if (A[i] == 0 && A[i + 1] == 0 && A[i + 2] == 1) {
      bits.emplace_back(1);
    } else if (A[i] == 1 && A[i + 1] == 1 && A[i + 2] == 0) {
      bits.emplace_back(1);
    } else if (A[i] == 0 && A[i + 1] == 1 && A[i + 2] == 0) {
      bits.emplace_back(0);
      bits.emplace_back(0);
    } else if (A[i] == 0 && A[i + 1] == 1 && A[i + 2] == 1) {
      bits.emplace_back(0);
      bits.emplace_back(1);
    } else if (A[i] == 1 && A[i + 1] == 0 && A[i + 2] == 1) {
      bits.emplace_back(1);
      bits.emplace_back(0);
    } else if (A[i] == 1 && A[i + 1] == 1 && A[i + 2] == 1) {
      bits.emplace_back(1);
      bits.emplace_back(1);
    }
  }
  long long ans = 0;
  for (int i = 0; i < 60; i++) {
    if (bits[i]) {
      ans |= 1ll << i;
    }
  }
  return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...