Submission #1026733

#TimeUsernameProblemLanguageResultExecution timeMemory
1026733ach00Vision Program (IOI19_vision)C++14
33 / 100
493 ms694064 KiB
#include "vision.h"
#include <bits/stdc++.h>
using namespace std;

int h,w,k;

bool bounds(int y, int x) {
	if(y >= 0 && x >= 0 && y < h && x < w) return true;
	return false;
}

void construct_network(int H, int W, int K) {
	h=H; w=W; k=K;
	int index = H*W;
	vector<vector<vector<vector<bool>>>> have_used(w, vector<vector<vector<bool>>>(h, vector<vector<bool>>(w, vector<bool>(h, false))));
	for(int y = 0; y < H; y++) {
		for(int x = 0; x < W; x++) {
			for(int i = 0; i <= K; i++) {
				int fdir = i;
				int sdir = K-i;
				int ny = y+fdir;
				int nx = x+sdir;
				if(bounds(ny, nx) && !have_used[x][y][nx][ny]) {
					add_and({y*w + x, ny*w + nx});
					index++;
					have_used[x][y][nx][ny] = true;
					have_used[nx][ny][x][y] = true;
				}
				ny = y-fdir;
				nx = x+sdir;
				if(bounds(ny, nx) && !have_used[x][y][nx][ny]) {
					add_and({y*w + x, ny*w + nx});
					index++;
					have_used[x][y][nx][ny] = true;
					have_used[nx][ny][x][y] = true;
				}
				ny = y-fdir;
				nx = x-sdir;
				if(bounds(ny, nx) && !have_used[x][y][nx][ny]) {
					add_and({y*w + x, ny*w + nx});
					index++;
					have_used[x][y][nx][ny] = true;
					have_used[nx][ny][x][y] = true;
				}
				ny = y+fdir;
				nx = x-sdir;
				if(bounds(ny, nx) && !have_used[x][y][nx][ny]) {
					add_and({y*w + x, ny*w + nx});
					index++;
					have_used[x][y][nx][ny] = true;
					have_used[nx][ny][x][y] = true;
				}
			}
		}
	}
	vector<int> Ns;
	for(int i = H*W; i < index; i++) {
		Ns.push_back(i);
	}
	add_or(Ns);
}
#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...