제출 #1155693

#제출 시각아이디문제언어결과실행 시간메모리
1155693gygVision Program (IOI19_vision)C++20
32 / 100
4 ms1988 KiB
#include "vision.h"
#include <bits/stdc++.h>
using namespace std;
#define vec vector
#define pii pair<int, int>
#define fir first 
#define sec second

int n, m, k;

int id(int i, int j) { return i * m + j; }

void construct_network(int _n, int _m, int _k) {
	n = _n, m = _m, k = _k;

	int nm = n * m - 1;
	map<int, int> rw, cl;
	map<pii, int> rw_pr, cl_pr;
	map<int, int> rw_df, cl_df;

	for (int i = 0; i < n; i++) {
		vec<int> x;
		for (int j = 0; j < m; j++) x.push_back(id(i, j));
		add_or(x), rw[i] = ++nm;
	}
	for (int j = 0; j < m; j++) {
		vec<int> x;
		for (int i = 0; i < n; i++) x.push_back(id(i, j));
		add_or(x), cl[j] = ++nm;
	}

	for (int i = 0; i < n; i++) {
		for (int j = i + 1; j < n; j++) {
			add_and({rw[i], rw[j]}), rw_pr[{i, j}] = ++nm;
		}
	}
	for (int i = 0; i < m; i++) {
		for (int j = i + 1; j < m; j++) {
			add_and({cl[i], cl[j]}), cl_pr[{i, j}] = ++nm;
		}
	}

	for (int d = 0; d < n; d++) {
		if (d == 0) {
			vec<int> x;
			for (int i = 0; i < n; i++) x.push_back(rw[i]);
			add_xor(x), rw_df[d] = ++nm;
		} else {
			vec<int> x;
			for (int i = 0; i < n; i++) {
				for (int j = i + 1; j < n; j++) {
					if (abs(i - j) == d) x.push_back(rw_pr[{i, j}]);
				}
			}
			add_or(x), rw_df[d] = ++nm;
		}
	}
	for (int d = 0; d < m; d++) {
		if (d == 0) {
			vec<int> x;
			for (int i = 0; i < m; i++) x.push_back(cl[i]);
			add_xor(x), cl_df[d] = ++nm;
		} else {
			vec<int> x;
			for (int i = 0; i < m; i++) {
				for (int j = i + 1; j < m; j++) {
					if (abs(i - j) == d) x.push_back(cl_pr[{i, j}]);
				}
			}
			add_or(x), cl_df[d] = ++nm;
		}
	}

	vec<int> x;
	for (int rw_d = 0; rw_d < n; rw_d++) {
		for (int cl_d = 0; cl_d < m; cl_d++) {
			if (rw_d + cl_d != k) continue;
			add_and({rw_df[rw_d], cl_df[cl_d]}), x.push_back(++nm);
		}
	}
	add_or(x);
}
#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...