제출 #1330190

#제출 시각아이디문제언어결과실행 시간메모리
1330190enzyVision Program (IOI19_vision)C++20
44 / 100
36 ms15616 KiB
#include "vision.h"
#include<bits/stdc++.h>
#define pii pair<int,int>
#define fi first
#define se second
using namespace std;

bool in(int x, int y, int H, int W){
	return 0<=x&&x<H&&0<=y&&y<W;
}

map<pii,int>mp;

void construct_network(int H, int W, int K){
	mp.clear();
	vector<pii>aux;
	vector<int>ret;
	for(int j=0;j<H*W;j++){
		vector<int>ask;

		int x=j/W, y=j%W;
		for(int i=-H;i<=H;i++){
			int nx=x+i, ny=y+(K-i);
			if(j<nx*W+ny&&in(nx,ny,H,W)&&abs(x-nx)+abs(y-ny)==K&&mp[{j,nx*W+ny}]==0){
				ask.push_back(nx*W+ny);
				mp[{j,nx*W+ny}]++;
			}
			nx=x-i, ny=y+(K-i);
			if(j<nx*W+ny&&in(nx,ny,H,W)&&abs(x-nx)+abs(y-ny)==K&&mp[{j,nx*W+ny}]==0){
				ask.push_back(nx*W+ny);
				mp[{j,nx*W+ny}]++;
			}
			nx=x+i, ny=y-(K-i);
			if(j<nx*W+ny&&in(nx,ny,H,W)&&abs(x-nx)+abs(y-ny)==K&&mp[{j,nx*W+ny}]==0){
				ask.push_back(nx*W+ny);
				mp[{j,nx*W+ny}]++;
			}
			nx=x-i, ny=y-(K-i);
			if(j<nx*W+ny&&in(nx,ny,H,W)&&abs(x-nx)+abs(y-ny)==K&&mp[{j,nx*W+ny}]==0){
				ask.push_back(nx*W+ny);
				mp[{j,nx*W+ny}]++;
			}
		}
		if(ask.empty()) continue;
		ask.push_back(j);
		int a=add_or(ask);
		ask.push_back(a);
		int b=add_xor(ask);
		ask.pop_back();
		if(ask.size()==2){
			ret.push_back(b);
			continue;
		}
		ask.pop_back();
		int c=add_or(ask);
		ask.push_back(c);
		int d=add_xor(ask);
		ask.pop_back();
		aux.push_back({b,d});
	}
	for(pii p : aux) ret.push_back(add_xor({p.fi,p.se}));
	int ult=add_or(ret);
}
#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...