Submission #293800

#TimeUsernameProblemLanguageResultExecution timeMemory
293800PeppaPigVision Program (IOI19_vision)C++14
34 / 100
59 ms5364 KiB
#include "vision.h"
#include <bits/stdc++.h>

using namespace std;

int n, m, k;
vector<int> Aor, Axor, Bor, Bxor;

int get(int i, int j) { return m * i + j; }

int add_and(int a, int b) { return add_and({a, b}); }

int add_and_not(int a, int b) { return add_and(a, add_not(b)); }

void gen_diag(vector<int> &ovec, vector<int> &xvec, bool flip) {
	for(int sum = 0; sum < n + m - 1; sum++) {
		vector<int> now;
		for(int i = 0; i < n; i++) {
			int j = flip ? m - sum + i - 1 : sum - i;
			if(j < 0 || j > m - 1) continue;
			now.emplace_back(get(i, j));
		}
		ovec.emplace_back(add_or(now));
		xvec.emplace_back(add_xor(now));
	}		
}

int count(vector<int> &ovec, vector<int> &xvec, int dist) {
	vector<int> lo, lx, ret;

	++dist;
	for(int i = 0; i < (int)ovec.size(); i++) {
		lo.emplace_back(ovec[i]), lx.emplace_back(xvec[i]);
		if((int)lo.size() > dist)
			lo.erase(lo.begin()), lx.erase(lx.begin());

		if((int)lo.size() == dist)
			ret.emplace_back(add_and_not(add_or(lo), add_xor(lx)));
	}
	return add_or(ret);
}

void construct_network(int _n, int _m, int _k) {
	n = _n, m = _m, k = _k;

	gen_diag(Aor, Axor, false);
	gen_diag(Bor, Bxor, true);
	
	add_and_not(add_and(count(Aor, Axor, k), count(Bor, Bxor, k)),
		add_and(count(Aor, Axor, k - 1), count(Aor, Axor, k - 1)));
}
#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...