Submission #198765

#TimeUsernameProblemLanguageResultExecution timeMemory
198765AkashiVision Program (IOI19_vision)C++14
44 / 100
21 ms3136 KiB
#include <bits/stdc++.h>
#include "vision.h"
 
using namespace std;
 
bool viz[205][205];
int wh[205][205];
int Last, H, W, K;
void do_it(int i, int j){
	if(viz[i][j]) return ;
	vector <int> v;
	viz[i][j] = 1;

	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) return ;
	wh[i][j] = add_or(v);
	Last = wh[i][j];
}
 
void construct_network(int n, int m, int k) {
	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) do_it(i, mj - d);
			if(mj + d < W) do_it(i, mj + d);
		}
		
		for(int j = max(0, mj - d); j <= max(W - 1, mj + d) ; ++j){
			if(mi - d >= 0) do_it(mi - d, j);
			if(mi + d < H) do_it(mi + d, 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);
			}
		}
	}
	

	vector <int> v;
	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...