Submission #1051146

#TimeUsernameProblemLanguageResultExecution timeMemory
1051146HalitVision Program (IOI19_vision)C++17
100 / 100
24 ms6116 KiB
#include "vision.h"
#include <bits/stdc++.h>

void construct_network(int H, int W, int K) { 
  std::vector<std::vector<int>> a(H+W-1), b(H+W-1);
  for (int i = 0;i < H; ++i) {
    for (int j = 0;j < W; ++j) {
      a[i +  j].push_back(i * W + j);
      b[W - j - 1 + i].push_back(i * W + j);
    }     
  }
  std::vector<std::vector<int>> diagonal(2);
  std::vector<std::vector<int>> diagonal_xor(2);
  for (int i = 0;i < H+W-1; ++i) {
    diagonal[0].push_back(add_or(a[i]));
    diagonal[1].push_back(add_or(b[i]));
    diagonal_xor[0].push_back(add_xor(a[i]));
    diagonal_xor[1].push_back(add_xor(b[i]));
  }
  std::vector<std::vector<int>> ends(2);
  for (int d = 0;d < 2; ++d) {
    for (int i = 0;i+K < H+W-1; ++i) {
      std::vector<int> test = {diagonal[d][i], diagonal[d][i+K]};
      ends[d].push_back(add_and(test));
    }
  }
  std::vector<int> results;
  ++K;
  for (int d = 0;d < 2; ++d) {
    for (int i = 0;i+K <= H+W-1; ++i) {
      std::vector<int> area_or, area_xor;
      for (int j = i;j < i+K; ++j) {
        area_or.push_back(diagonal[d^1][j]);
        area_xor.push_back(diagonal_xor[d^1][j]);
      }
      int aor = add_or(area_or);
      int axor = add_xor(area_xor);
      int notxor = add_not(axor);
      results.push_back(add_and({add_or(ends[d]), add_and({aor, notxor})}));
    }
  }
  add_or(results);
  return;
}
#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...