제출 #533734

#제출 시각아이디문제언어결과실행 시간메모리
533734benson1029Vision Program (IOI19_vision)C++14
100 / 100
15 ms1680 KiB
#include "vision.h"
#include<bits/stdc++.h>
using namespace std;

int row[205], col[205];
int vl[9];

void addone(int x) {
	int carry = x;
	for(int i=0; i<9; i++) {
		int x = vl[i];
		vl[i] = add_xor({x, carry});
		carry = add_and({x, carry});
	}
}

void construct_network(int H, int W, int K) {
	vector<int> v;
	for(int i=0; i<H; i++) {
		v.clear();
		for(int j=0; j<W; j++) {
			v.push_back(i*W+j);
		}
		if(i>0) v.push_back(row[i-1]);
		row[i] = add_xor(v);
	}
	for(int i=0; i<W; i++) {
		v.clear();
		for(int j=0; j<H; j++) {
			v.push_back(j*W+i);
		}
		if(i>0) v.push_back(col[i-1]);
		col[i] = add_xor(v);
	}
	if(H*W==2) {
		for(int i=0; i<9; i++) {
			vl[i] = add_not(0);
		}
	} else {
		for(int i=0; i<9; i++) {
			vl[i] = add_and({0, 1, 2});
		}
	}
	for(int i=0; i<H; i++) {
		addone(row[i]);
	}
	for(int i=0; i<W; i++) {
		addone(col[i]);
	}
	for(int i=0; i<9; i++) {
		if((K>>i)%2==0) {
			vl[i] = add_not(vl[i]);
		}
	}
	v.clear();
	for(int i=0; i<9; i++) v.push_back(vl[i]);
	add_and(v);
}
#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...