Submission #1197505

#TimeUsernameProblemLanguageResultExecution timeMemory
1197505MateiKing80Vision Program (IOI19_vision)C++20
100 / 100
17 ms1352 KiB
#include "vision.h"
#include <bits/stdc++.h>

using namespace std;

using ll = long long;

int add_or(int x, int y) {
	return add_or(vector<int>({x, y}));
}
int add_and(int x, int y) {
	return add_and(vector<int>({x, y}));
}

const int N = 210;
int su[2 * N], di[2 * N];
int ls[2 * N], rs[2 * N], ld[2 * N], rd[2 * N];

void construct_network(int h, int w, int k) {
	for (int q = 0; q <= h + w - 2; q ++) {
		vector<int> ss, dd;
		for (int i = 0; i < h; i ++) {
			for (int j = 0; j < w; j ++) {
				if (i + j == q)
					ss.push_back(i * w + j);
				if (i + w - 1 - j == q)
					dd.push_back(i * w + j);
			}
		}
		su[q] = add_or(ss);
		di[q] = add_or(dd);
	}
	ls[0] = su[0], ld[0] = di[0], rs[h + w - 2] = su[h + w - 2], rd[h + w - 2] = di[h + w - 2];
	for (int i = 1; i <= h + w - 2; i ++) {
		ls[i] = add_or(su[i], ls[i - 1]);
		ld[i] = add_or(di[i], ld[i - 1]);
	}
	for (int i = h + w - 3; i >= 0; --i) {
		rs[i] = add_or(su[i], rs[i + 1]);
		rd[i] = add_or(di[i], rd[i + 1]);
	}
	int one = add_or(0, add_not(0));
	int zero = add_not(one);

	vector<int> eq = {zero}, gr = {zero};
	for (int i = 0; i + k <= h + w - 2; i ++) {
		eq.push_back(add_and(su[i], su[i + k]));
		eq.push_back(add_and(di[i], di[i + k]));
	}
	for (int i = 0; i + k < h + w - 2; i ++) {
		gr.push_back(add_and(su[i], rs[i + k + 1]));
		gr.push_back(add_and(di[i], rd[i + k + 1]));
	}
	int eq_flag = add_or(eq);
	int gr_flag = add_not(add_or(gr));
	add_and(eq_flag, gr_flag);
}
#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...