Submission #825765

#TimeUsernameProblemLanguageResultExecution timeMemory
825765errayVision Program (IOI19_vision)C++17
100 / 100
21 ms2148 KiB
#include "vision.h"
#include <bits/stdc++.h>

using namespace std;

void construct_network(int H, int W, int K) {
  //debug(H, W, K);
  int rows = H * W;
  for (int i = 0; i < H; ++i) {
    vector<int> ask(W);
    for (int j = 0; j < W; ++j) {
      ask[j] = i * W + j;
    }
    add_or(ask);
  }
  int cols = H * W + H; 
  for (int j = 0; j < W; ++j) {
    vector<int> ask(H);
    for (int i = 0; i < H; ++i) {
      ask[i] = i * W + j;
    }
    add_or(ask);
  }
  auto Add_zero = [&] {
    return add_xor({0, 0});
  };
  const int BITS = __lg(H + W + 2) + 1;
  vector<int> sum(BITS);
  for (int i = 0; i < BITS; ++i) {
    sum[i] = Add_zero();
  }
  auto Solve = [&](int start, int N) {
    vector<int> ask;
    vector<int> prefs;
    for (int i = 0; i < N; ++i) {
      ask.push_back(start + i);
      prefs.push_back(add_xor(ask));
    }
    int not_zero = add_not(prefs.back());
    for (int i = 0; i < N; ++i) {
      int carry = add_and({not_zero, prefs[i]});
      for (int b = 0; b < BITS; ++b) {
        int new_carry = add_and({sum[b], carry});
        sum[b] = add_xor({sum[b], carry});
        swap(carry, new_carry);
      }
    }
  };
  Solve(rows, H);
  Solve(cols, W);
  vector<int> K_bits(BITS);
  int zero = Add_zero();
  int one = add_not(zero);
  int ans = Add_zero();
  for (int b = 0; b < BITS; ++b) {
    ans = add_or({ans, add_xor({((K >> b) % 2 ? one : zero), sum[b]})});
  }
  add_not(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...
#Verdict Execution timeMemoryGrader output
Fetching results...