Submission #1050790

#TimeUsernameProblemLanguageResultExecution timeMemory
1050790HalitVision Program (IOI19_vision)C++17
36 / 100
20 ms5332 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), b(H+W);
  for (int i = 0;i < H; ++i) {
    for (int j = 0;j < W; ++j) {
      a[i +  j].push_back(i * W + j);
      b[H - i + j - 1].push_back(i * W + j);
    }     
  }
  std::vector<std::vector<int>> diagonal(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]));
  }
  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;
  for (int d = 0;d < 2; ++d) {
    if (2*K >= H+W-2) {
      std::vector<int> area_or;
      for (int i = 0;i < H+W-1; ++i) {
        area_or.push_back(diagonal[d][i]);
      }
      results.push_back(add_and({add_or(ends[d]), add_or(area_or)}));
      continue;
    }
    for (int i = 0;i+2*K < H+W-1; ++i) {
      std::vector<int> area_or, area_xor;
      for (int j = i;j <= std::min(i+2*K, H+W-2); ++j) {
        area_or.push_back(diagonal[d^1][j]);
        area_xor.push_back(diagonal[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...