제출 #716983

#제출 시각아이디문제언어결과실행 시간메모리
716983NonozeVision Program (IOI19_vision)C++14
66 / 100
13 ms1108 KiB
#include "vision.h"

#include <bits/stdc++.h>
using namespace std;

void construct_network(int H, int W, int K) {
	vector<int> Ns;
	int empl=H*W-1;
	if (K==1 && min(H, W)!=1)
	{
		vector<int> verifligne;
		vector<int> verifcol;
		for (int i = 0; i < H; ++i)
		{
			vector<int> ajout;
			for (int j = 0; j < W; ++j)
			{
				ajout.push_back(i*W+j);
			}
			verifligne.push_back(add_or(ajout));
		}
		for (int j = 0; j < W; ++j)
		{
			vector<int> ajout;
			for (int i = 0; i < H; ++i)
			{
				ajout.push_back(i*W+j);
			}
			verifcol.push_back(add_or(ajout));
		}

		vector<int> finligne;
		for (int i = 0; i < H - 1; i++) {
			finligne.push_back(add_and({verifligne[i], verifligne[i+1]}));
		}
 
		vector<int> fincol;
		for (int i = 0; i < W - 1; i++) {
			fincol.push_back(add_and({verifcol[i], verifcol[i+1]}));
		}

		int a=add_xor(verifcol), b=add_or(finligne);
		int c=add_xor(verifligne), d=add_or(fincol);
		add_or({add_and({a, b}), add_and({c, d})});
		return;
	}
	if (max(H, W)>30 && min(H, W)!=1)
	{
		int i=0, j=0;
		vector<int> possibles;
		int act=i*W+j;
		for (int k = 0; k < H; ++k)
		{
			for (int l = 0; l < W; ++l)
			{
				if (abs(k-i)+abs(l-j)==K && k*W+l>=act)
				{
					possibles.push_back(k*W+l);
				}
			}
		}
		if (!possibles.size()) {
			return;
		}
		if (possibles.size()==1)
		{
			add_and({possibles[0], i*W+j});
			empl++;
		}
		else
		{
			add_xor(possibles);
			empl++;
			add_and({empl, i*W+j});
			empl++;
		}
		return;
	}

	for (int i = 0; i < H; ++i)
	{
		for (int j = 0; j < W; ++j)
		{
			vector<int> possibles;
			int act=i*W+j;
			for (int k = 0; k < H; ++k)
			{
				for (int l = 0; l < W; ++l)
				{
					if (abs(k-i)+abs(l-j)==K && k*W+l>=act)
					{
						possibles.push_back(k*W+l);
					}
				}
			}
			if (!possibles.size()) continue;
			if (possibles.size()==1)
			{
				add_and({possibles[0], i*W+j});
				empl++;
			}
			else
			{
				add_xor(possibles);
				empl++;
				add_and({empl, i*W+j});
				empl++;
			}
			Ns.push_back(empl);
		}
	}
	add_or(Ns);
	return;
}
#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...