Submission #298533

#TimeUsernameProblemLanguageResultExecution timeMemory
298533JPN20Vision Program (IOI19_vision)C++17
58 / 100
11 ms1276 KiB
#include "vision.h" #include <bits/stdc++.h> using namespace std; vector<int> t1[209]; vector<int> t2[209]; void Reigai(int H, int W, int K) { vector<int> vec; int cnt = H * W; for (int i = 0; i < H; i++) { for (int j = 0; j < W; j++) { for (int k = 0; k < H; k++) { for (int l = 0; l < W; l++) { if (abs(i - k) + abs(j - l) != K) continue; int c1 = i * W + j; int c2 = k * W + l; if (c1 > c2) continue; add_and(vector<int>{c1, c2}); vec.push_back(cnt); cnt++; } } } } add_or(vec); } void solve_Subtask5(int H, int W, int K) { for (int i = 0; i < 208; i++) t1[i].clear(); for (int i = 0; i < 208; i++) t2[i].clear(); int cnt = H * W + H + W; // Step #A. Tate int milestone1 = cnt; for (int i = 0; i < H; i++) { for (int j = i + 1; j < H; j++) { int c1 = H * W + i; int c2 = H * W + j; t1[j - i].push_back(cnt); add_and(vector<int>{c1, c2}); cnt++; } } // Step #B. Yoko int milestone2 = cnt; for (int i = 0; i < W; i++) { for (int j = i + 1; j < W; j++) { int c1 = H * W + H + i; int c2 = H * W + H + j; t2[j - i].push_back(cnt); add_and(vector<int>{c1, c2}); cnt++; } } vector<int> d1; for (int i = 0; i < H; i++) d1.push_back(H * W + i); vector<int> d2; for (int i = 0; i < W; i++) d2.push_back(H * W + H + i); // Step #C. Tate Diff int milestone3 = cnt; add_xor(d1); cnt++; for (int i = 1; i < H; i++) { add_or(t1[i]); cnt++; } // Step #D. Yoko Diff int milestone4 = cnt; add_xor(d2); cnt++; for (int i = 1; i < W; i++) { add_or(t2[i]); cnt++; } // Step #E. Final Sum int milestone5 = cnt; vector<int> finale; for (int i = 0; i < H; i++) { for (int j = 0; j < W; j++) { if (i + j != K) continue; finale.push_back(cnt); add_and(vector<int>{milestone3 + i, milestone4 + j}); cnt++; } } add_or(finale); } void solve_Subtask7(int H, int W) { for (int i = 0; i < H - 1; i++) { int c1 = H * W + i; int c2 = H * W + (i + 1); add_and(vector<int>{c1, c2}); } for (int i = 0; i < W - 1; i++) { int c1 = H * W + H + i; int c2 = H * W + H + (i + 1); add_and(vector<int>{c1, c2}); } int base = H * W + H + W + (H - 1) + (W - 1); vector<int> d1; for (int i = 0; i < H; i++) d1.push_back(H * W + i); vector<int> d2; for (int i = 0; i < W; i++) d2.push_back(H * W + H + i); vector<int> d3; for (int i = 0; i < H - 1; i++) d3.push_back(H * W + H + W + i); vector<int> d4; for (int i = 0; i < W - 1; i++) d4.push_back(H * W + H + W + (H - 1) + i); add_xor(d1); add_xor(d2); add_xor(d3); add_xor(d4); add_and(vector<int>{base + 0, base + 3}); add_and(vector<int>{base + 1, base + 2}); add_or(vector<int>{base + 4, base + 5}); } void construct_network(int H, int W, int K) { if (H == 1 || W == 1) { Reigai(H, W, K); return; } // Step #1. Yoko for (int i = 0; i < H; i++) { vector<int> vec; for (int j = 0; j < W; j++) vec.push_back(i * W + j); add_or(vec); } // Step #2. Tate for (int i = 0; i < W; i++) { vector<int> vec; for (int j = 0; j < H; j++) vec.push_back(j * W + i); add_or(vec); } if (K == 1) solve_Subtask7(H, W); if (K >= 2) solve_Subtask5(H, W, K); }

Compilation message (stderr)

vision.cpp: In function 'void solve_Subtask5(int, int, int)':
vision.cpp:35:6: warning: unused variable 'milestone1' [-Wunused-variable]
   35 |  int milestone1 = cnt;
      |      ^~~~~~~~~~
vision.cpp:47:6: warning: unused variable 'milestone2' [-Wunused-variable]
   47 |  int milestone2 = cnt;
      |      ^~~~~~~~~~
vision.cpp:71:6: warning: unused variable 'milestone5' [-Wunused-variable]
   71 |  int milestone5 = cnt;
      |      ^~~~~~~~~~
#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...