제출 #1348740

#제출 시각아이디문제언어결과실행 시간메모리
1348740hyyhVision Program (IOI19_vision)C++20
44 / 100
24 ms7812 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;
	int cur = H*W+19;
	vector<int> all;
	for(int i{};i < H;i++){
		for(int j{};j < W;j++) all.emplace_back(ind(i,j));
	}
	for(int i{};i < 19;i++) add_xor(all);
	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;
	};
	vector<int> vc;
	for(int i{};i < H;i++){
		for(int j{};j < W;j++) vc.emplace_back(ind(i,j));
		add_xor(vc);
		process();
	}
	vc.clear();
	for(int i{};i < W;i++){
		for(int j{};j < H;j++) vc.emplace_back(ind(j,i));
		add_xor(vc);
		process();
	}
	for(int i{};i < 19;i++) add_not(last+i);
	vc.clear();
	for(int i{};i < 9;i++){
		if((K>>i)&1) vc.emplace_back(last+i*2+1);
		else vc.emplace_back(cur+i*2+1);
	}
	add_and(vc);
}
#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...