Submission #198773

#TimeUsernameProblemLanguageResultExecution timeMemory
198773AkashiVision Program (IOI19_vision)C++14
44 / 100
20 ms3188 KiB
#include <bits/stdc++.h>
#include "vision.h"
 
using namespace std;
 
bool viz[205][205], cul[205][205];
int wh[205][205];
int H, W, K;
void paint(int i, int j){
	if(cul[i][j]) return ;
	for(int x = -K; x <= K ; ++x){
		int y = K - abs(x);
	
		int l = i + x, c = j + y; 
		if(l >= 0 && c >= 0 && l < H && c < W) cul[l][c] = 1;
	
		y = -y; l = i + x, c = j + y; 
		if(l >= 0 && c >= 0 && l < H && c < W) cul[l][c] = 1;
		
	}
}
 
void construct_network(int n, int m, int k) {
	vector <int> v;
 
	H = n; W = m; K = k;
 
	int mi = H / 2, mj = W / 2;
	for(int d = 0; d <= max(H, W) ; ++d){
		for(int i = max(0, mi - d); i <= max(H - 1, mi + d) ; ++i){
			if(mj - d >= 0) paint(i, mj - d);
			if(mj + d < W) paint(i, mj + d);
		}
		
		for(int j = max(0, mj - d); j <= max(W - 1, mj + d) ; ++j){
			if(mi - d >= 0) paint(mi - d, j);
			if(mi + d < H) paint(mi + d, j);
		}
	}
 
	int Last = 0;
	for(int i = 0; i < H ; ++i){
		for(int j = 0; j < W ; ++j){
			if(!cul[i][j]) continue ;
			viz[i][j] = 1;
			v.clear();
	
			for(int x = -K; x <= K ; ++x){
				int y = K - abs(x);
				int l = i + x, c = j + y; 
		
				if(l >= 0 && c >= 0 && l < H && c < W){
					if(!viz[l][c]) v.push_back(l * W + c);
				}
				
				y = -y;
				l = i + x, c = j + y; 
		
				if(l >= 0 && c >= 0 && l < H && c < W){
					if(!viz[l][c]) v.push_back(l * W + c);
				}
			}
	
			if(v.size() == 0) continue ;
			wh[i][j] = add_or(v);
			Last = wh[i][j];
		}
	}
	
	int st = Last + 1, dr = 0;
	for(int i = 0; i < H ; ++i){
		for(int j = 0; j < W ; ++j){
			if(wh[i][j]){
				vector <int> v;
				v.push_back(i * W + j);
				v.push_back(wh[i][j]);
				dr = add_and(v);
			}
		}
	}
	
	v.clear();
	for(int i = st; i <= dr ; ++i) v.push_back(i);
	add_or(v);
 
	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...