제출 #1348762

#제출 시각아이디문제언어결과실행 시간메모리
1348762hyyhVision Program (IOI19_vision)C++20
100 / 100
6 ms2176 KiB
#include "vision.h"
#include <vector>

using namespace std;

/*
from end of squre:
odd ind -> actual binary
even ind -> leftover
acc = leftover^lastacc
leftover = acc&lastleftover
*/

void construct_network(int H, int W, int K) {
	auto ind = [&](int i,int j){
		return i*W+j;
	};
	int last  = H*W+H+W+4;
	int cur = H*W+H+W+23;
	vector<int> all;
	for(int i{};i < H;i++){
		for(int j{};j < W;j++) all.emplace_back(ind(i,j));
	}
	auto process = [&](){
		for(int i{1};i < 19;i++){
			if(i&1) add_xor({last+i,cur+i-1});
			else add_and({last+i-1,cur+i-2});
		}
		last = cur;
		cur += 19;
	};
	add_xor(all);
	add_not(H*W);
	add_not(H*W+1);
	for(int i{};i < H;i++){
		vector<int> vc;
		for(int j{};j < W;j++) vc.emplace_back(ind(i,j));
		add_xor(vc);
	}
	add_not(H*W+1);
	for(int i{};i < W;i++){
		vector<int> vc;
		for(int j{};j < H;j++) vc.emplace_back(ind(j,i));
		add_xor(vc);
	}
	for(int i{};i < 19;i++) add_not(H*W+1);
	for(int i{};i < H;i++){
		add_xor({last,H*W+i+3});
		process();
	}
	for(int i{};i < W;i++){
		add_xor({last,H*W+i+H+4});
		process();
	}
	for(int i{};i < 19;i++) add_not(last+i);
	vector<int> val;
	for(int i{};i < 9;i++){
		if((K>>i)&1) val.emplace_back(last+i*2+1);
		else val.emplace_back(cur+i*2+1);
	}
	add_and(val);
}
#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...