Submission #1295930

#TimeUsernameProblemLanguageResultExecution timeMemory
1295930turbatVision Program (IOI19_vision)C++20
0 / 100
19 ms4692 KiB
#include "vision.h"
using namespace std;


vector<int> concatVectors(const vector<vector<int>>& vecs) {
  vector<int> result;
  for (const auto& vec : vecs) {
    result.insert(result.end(), vec.begin(), vec.end());
  }
  return result;
}

int add_lte_k(vector<vector<int>>& diagonals, int K) {
  int totalDiagnols = diagonals.size();
  vector<int> diagXorIndices, diagOrIndices, inSameDiagonals, lessThanK;
  for (int d = 0; d < totalDiagnols; d++) {
    diagXorIndices.push_back(add_xor(diagonals[d]));
    diagOrIndices.push_back(add_or(diagonals[d]));
    inSameDiagonals.push_back(add_xor({diagXorIndices[d], diagOrIndices[d]}));
  }
  for (int i = 0; i < totalDiagnols - K; i++) {
    vector<int> input;
    copy(diagOrIndices.begin() + i, diagOrIndices.begin() + i + K + 1,
         back_inserter(input));

    lessThanK.push_back(add_xor({add_or(input), add_xor(input)}));
  }
  return add_or(concatVectors({lessThanK, inSameDiagonals}));
}


int add_lte_k_both(int H, int W, int K) {
  int totalDiagnols = H + W - 1;
  vector<vector<int>> diagonals(totalDiagnols), crossDiagonals(totalDiagnols);
  for (int i = 0; i < H; i++) {
    for (int j = 0; j < W; j++) {
      diagonals[i + j].push_back(i * W + j);
      crossDiagonals[H - 1 - i + j].push_back(i * W + j);
    }
  }
  return add_and({add_lte_k(diagonals, K), add_lte_k(crossDiagonals, K)});
}


void construct_network(int H, int W, int K) {
  add_and({add_lte_k_both(H, W, K), add_not(add_lte_k_both(H, W, K + 1))});
}

#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...