제출 #1071574

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

#define pii pair<int,int>
#define fs first
#define sc second

const int mxn = 404;
const int sh = mxn>>1;

int H,W,K;

int encode(int r,int c){
	return r*W+c;
}
pii decode(int k){
	return pii(k/W,k%W);
}

vector<int> v[mxn],vv[mxn];
int arr[mxn],brr[mxn];

void construct_network(int HH, int WW, int KK) {
	H = HH,W = WW,K = KK;
	int zero = add_xor({0,0});
	int one = add_not(zero);
	int ans = zero;

	int t1 = zero;
	{
		for(int i = 0;i<H;i++){
			for(int j = 0;j<W;j++){
				v[i+j].push_back(encode(i,j));
			}
		}
		for(int i = 0;i<mxn;i++){
			if(!v[i].empty()){
				arr[i] = add_or(v[i]);
			}
		}
		for(int i = 0;i<H+W;i++){
			if(i+K>=mxn||v[i+K].empty()||v[i].empty())continue;
			t1 = add_or({t1,add_and({arr[i],arr[i+K]})});
		}
	}

	int t2 = zero;
	{
		for(int i = 0;i<H;i++){
			for(int j = 0;j<W;j++){
				vv[sh+i-j].push_back(encode(i,j));
			}
		}
		for(int i = 0;i<mxn;i++){
			if(!vv[i].empty())brr[i] = add_or(vv[i]);
		}
		for(int i = 0;i<mxn;i++){
			if(vv[i].empty()||i+K>=mxn||vv[i+K].empty())continue;
			t2 = add_or({t2,add_and({brr[i],brr[i+K]})});
		}
	}

	int t3 = one;
	{
		for(int i = 0;i<mxn;i++){
			if(vv[i].empty())continue;
			int tmp = one;
			vector<int> ban;
			for(int j = 0;j<mxn;j++){
				if(vv[j].empty()||abs(i-j)<=K)continue;
				ban.push_back(brr[j]);
			}
			if(ban.empty())continue;
			tmp = add_or(ban);
			tmp = add_and({brr[i],tmp});
			tmp = add_not(tmp);
			t3 = add_and({t3,tmp});
		}
	}

	int t4 = one;
	{
		for(int i = 0;i<mxn;i++){
			vector<int> ban;
			if(v[i].empty())continue;
			int tmp = one;
			for(int j = 0;j<mxn;j++){
				if(v[j].empty()||abs(i-j)<=K)continue;
				ban.push_back(arr[j]);
			}
			if(ban.empty())continue;
			tmp = add_or(ban);
			tmp = add_and({arr[i],tmp});
			tmp = add_not(tmp);
			t4 = add_and({t4,tmp});
		}
	}

	ans = add_or({ans,add_and({t1,t3})});
	ans = add_or({ans,add_and({t2,t4})});
	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...