제출 #716821

#제출 시각아이디문제언어결과실행 시간메모리
716821NonozeVision Program (IOI19_vision)C++14
52 / 100
4 ms468 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 ((H>30 || W>30) && H!=1 && 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...