Submission #146901

#TimeUsernameProblemLanguageResultExecution timeMemory
146901dennisstarVision Program (IOI19_vision)C++14
0 / 100
26 ms2804 KiB
#include "vision.h"
#include <bits/stdc++.h>
using namespace std;
typedef vector<int> vim;
int chk[40010];
vim ans;
int H, W;
void f(int K)
{ 
	vim Ns;
	vim x, y, z;
	int i, j;
	if (H+W-2<K) {
		for (i=0; i<H*W; i++) Ns.push_back(i);
		ans.push_back(add_xor(Ns));
		return ;
	}
	for (i=0; i<H+W-1; i++) {
		Ns={};
		for (j=max(0, i-W+1); j<H&&(i-j)<W; j++) Ns.push_back(W*j+(i-j));
		x.push_back(add_or(Ns));
	}
	for (i=-W+1; i<H; i++) {
		Ns={};
		for (j=max(i, 0); j<H&&j-i<W; j++) Ns.push_back(j*(W+1)-i);
		y.push_back(add_or(Ns));
	}
	Ns={};
	for (i=K; i<H+W-1; i++) Ns.push_back(x[i]);
	int now=add_or(Ns);
	z.push_back(add_and({now, x[0]}));
	for (i=1; i<H+W-1; i++) {
		if (i+K-1<H+W-1)now=add_xor({now, x[i+K-1]});
		if (i>=K) now=add_or({now, x[i-K]});
		z.push_back(add_and({now, x[i]}));
	}
	Ns={};
	for (i=K; i<H+W-1; i++) Ns.push_back(y[i]);
	now=add_or(Ns);
	z.push_back(add_and({now, y[0]}));
	for (i=1; i<H+W-1; i++) {
		if (i+K-1<H+W-1)now=add_xor({now, y[i+K-1]});
		if (i>=K) now=add_or({now, y[i-K]});
		z.push_back(add_and({now, y[i]}));
	}
	ans.push_back(add_or(z));
}
void construct_network(int h, int w, int K) {
	H=h, W=w;
	f(K);
	f(K+1);
	ans[1]=add_not(ans[1]);
	add_and(ans);
}
#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...