제출 #807170

#제출 시각아이디문제언어결과실행 시간메모리
807170FEDIKUSVision Program (IOI19_vision)C++17
100 / 100
91 ms8048 KiB
#include "vision.h"
#include<iostream>
#include<vector>
#include<utility>
#include<cassert>

using namespace std;

int h,w;
int tru;
vector<pair<int,int> > pdij;
vector<pair<int,int> > mdij;

int polje(int i,int j){
	return i*w+j;
}

int mjed(int k){
	vector<int> sve;
	for(auto _:pdij){
		vector<int> ne;
		auto [p,gate]=_;
		for(auto j:pdij){
			if(p-j.first>k || -p+j.first>k){
				ne.push_back(j.second);
			}
		}
		if(ne.empty()) continue;
		int neka=add_or(ne);
		sve.push_back(add_and({neka,gate}));
	}
	for(auto _:mdij){
		vector<int> ne;
		auto [m,gate]=_;
		for(auto j:mdij){
			if(m-j.first>k || -m+j.first>k){
				ne.push_back(j.second);
			}
		}
		if(ne.empty()) continue;
		int neka=add_or(ne);
		sve.push_back(add_and({neka,gate}));
	}
	if(sve.empty()) return tru;
	return add_not(add_or(sve));
}

void construct_network(int _h,int _w,int k){
	h=_h; w=_w;
	vector<int> tmp;
	for(int i=0;i<h;i++){
		for(int j=0;j<w;j++){
			tmp.push_back(polje(i,j));
		}
	}
	tru=add_or(tmp);
	for(int p=0;p<=h+w-2;p++){
		vector<int> dij;
		for(int i=0;i<h;i++){
			for(int j=0;j<w;j++){
				if(i+j==p){
					dij.push_back(polje(i,j));
				}
			}
		}
		assert(!dij.empty());
		pdij.push_back({p,add_or(dij)});
	}
	for(int m=-w+1;m<=h-1;m++){
		vector<int> dij;
		for(int i=0;i<h;i++){
			for(int j=0;j<w;j++){
				if(i-j==m){
					dij.push_back(polje(i,j));
				}
			}
		}
		mdij.push_back({m,add_or(dij)});
	}
	add_xor({mjed(k-1),mjed(k)});
}
#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...