Submission #578721

#TimeUsernameProblemLanguageResultExecution timeMemory
578721VanillaVision Program (IOI19_vision)C++17
43 / 100
9 ms1100 KiB
#include <bits/stdc++.h>
#include "vision.h"
using namespace std;

int dist (int x1, int y1, int x2, int y2) {
	return abs(x2 - x1) + abs(y2 - y1);
}

void construct_network(int H, int W, int K) {
	//add_and({0, add_not(0)}) = 0
	//add_or({0, add_not(0)}) = 1
	if (H * W <= 100) {
		vector <int> last;
		for (int i1 = 0; i1 < H; i1++){
			for (int j1 = 0; j1 < W; j1++){
				for (int i2 = 0; i2 < H; i2++){
					for (int j2 = 0; j2 < W; j2++){
						if (dist(i1, j1, i2, j2) == K) {
							last.push_back(add_and({i1 * W + j1, i2 * W + j2}));
						}
					}
				}
			}
		}
		add_or(last);
	}
	else if (K == 1) {
		int op = 0;
		vector <int> row, col;
		for (int i = 0; i < H; i++){
			vector <int> v;
			for (int j = 0; j < W; j++){
				v.push_back(i * W + j);
			}
			row.push_back(add_or(v));
		}
		for (int j = 0; j < W; j++){
			vector <int> v;
			for (int i = 0; i < H; i++){
				v.push_back(i * W + j);
			}
			col.push_back(add_or(v));
		}
		vector <int> rs;
		vector <int> rdif, cdif;
		for (int i = 0; i + K < H; i++){
			rdif.push_back(add_and({row[i], row[i + K]}));
		}
		for (int i = 0; i + K < W; i++){
			cdif.push_back(add_and({col[i], col[i + K]}));
		}
		int c1 = add_and({0, add_not(0)});
		int c2 = add_and({0, add_not(0)});
		if (!cdif.empty()) c1 = add_and({add_xor(row), add_xor(cdif)});
		if (!rdif.empty()) c2 = add_and({add_xor(col), add_xor(rdif)});
		add_or({c1, c2});
	}
	else {
		vector <int> last;
		for (int i = 0; i < H; i++){
			for (int j = 0; j < W; j++){
				if ((i != 0 || j != 0) && i + j == K) last.push_back(add_or({i * W + j}));
			}
		}
		add_or(last);
	}
	
}

Compilation message (stderr)

vision.cpp: In function 'void construct_network(int, int, int)':
vision.cpp:28:7: warning: unused variable 'op' [-Wunused-variable]
   28 |   int op = 0;
      |       ^~
#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...