| # | Time | Username | Problem | Language | Result | Execution time | Memory | 
|---|---|---|---|---|---|---|---|
| 1239107 | Ludissey | Sky Walking (IOI19_walk) | C++20 | 0 ms | 0 KiB | 
#include "vision.h"
#include <bits/stdc++.h>
#define sz(a) (int)a.size()
#define all(a) a.begin(), a.end()
#define rall(a) a.rbegin(), a.rend()
int h,w;
using namespace std;
int conv(int i, int j){
	return (j+i*w);
}
int dist(int i, int j, int _i, int _j){
	return (abs(i-_i)+abs(j-_j));
}
void construct_network(int H, int W, int K) {
	h=H;
	w=W;
	if(min(H,W)==1||K>=100){
		vector<int> nodesCHECK;
		for (int i = 0; i < H; i++)
		{
			for (int j = 0; j < W; j++)
			{
				vector<int> tocheck;
				for (int _i = 0; _i < H; _i++)
				{
					for (int _j = j; _j < W; _j++)
					{
						if(dist(i,j,_i,_j)==K) tocheck.push_back(conv(_i,_j));
					}
				}
				if(sz(tocheck)>0){
					nodesCHECK.push_back(add_and({conv(i,j),add_or(tocheck)}));
				}
			}
		}
		add_or(nodesCHECK);
		return;
	}
	vector<int> row;
	vector<int> col;
	for (int i = 0; i < H; i++)
	{
		vector<int> add;
		for (int j = 0; j < W; j++) add.push_back(conv(i,j));
		row.push_back(add_or(add)); 
	}
	for (int j = 0; j < W; j++)
	{
		vector<int> add;
		for (int i = 0; i < H; i++) add.push_back(conv(i,j));
		col.push_back(add_or(add));
	}
	vector<int> rrow;
	for (int i = 0; i < H-1; i++)
	{
		rrow.push_back(add_and({row[i],row[i+1]}));
	}
	vector<int> ccol;
	for (int i = 0; i < W-1; i++)
	{
		ccol.push_back(add_and({col[i],col[i+1]}));
	}
	add_or({add_and({add_or(rrow),add_xor(col)}), add_and({add_or(ccol),add_xor(row)})});
}
