제출 #847064

#제출 시각아이디문제언어결과실행 시간메모리
847064siewjhVision Program (IOI19_vision)C++17
100 / 100
23 ms2936 KiB
#include "vision.h"
#include <bits/stdc++.h>
using namespace std;
int rows, cols, dlen, dist;
bool valid(int r, int c){
	return r >= 0 && c >= 0 && r < rows && c < cols;
}
int coord(int r, int c){
	return r * cols + c;
}
pair<int, int> solve(bool dir){
	vector<int> diag;
	if (dir){
		for (int i = 0; i < rows; i++){
			vector<int> test;
			int r = i, c = 0;
			for (; valid(r, c); r--, c++) test.push_back(coord(r, c));
			diag.push_back(add_or(test));
		}
		for (int i = 1; i < cols; i++){
			vector<int> test;
			int r = rows - 1, c = i;
			for (; valid(r, c); r--, c++) test.push_back(coord(r, c));
			diag.push_back(add_or(test));
		}
	}
	else{
		for (int i = 0; i < rows; i++){
			vector<int> test;
			int r = i, c = cols - 1;
			for (; valid(r, c); r--, c--) test.push_back(coord(r, c));
			diag.push_back(add_or(test));
		}
		for (int i = cols - 2; i >= 0; i--){
			vector<int> test;
			int r = rows - 1, c = i;
			for (; valid(r, c); r--, c--) test.push_back(coord(r, c));
			diag.push_back(add_or(test));
		}
	}
	int same = add_xor(diag), k, lk;
	vector<int> vk, vlk;
	for (int i = dlen - 1; i >= dist; i--) vk.push_back(add_and({diag[i - dist], diag[i]}));
	k = add_or(vk);
	for (int i = dlen - 1; i >= dist; i--){
		vector<int> test;
		for (int j = 0; j <= dist; j++) test.push_back(diag[i - j]);
		int present = add_or(test), one = add_xor(test);
		vlk.push_back(add_and({present, add_not(one)}));
	}
	vlk.push_back(same);
	lk = add_or(vlk);
	return {k, lk};
}
void construct_network(int H, int W, int K) {
	rows = H, cols = W, dlen = H + W - 1, dist = K;
	auto lp = solve(1), rp = solve(0);
	int a1 = add_and({lp.first, rp.second}), a2 = add_and({lp.second, rp.first});
	add_or({a1, a2});
}
#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...