Submission #1327145

#TimeUsernameProblemLanguageResultExecution timeMemory
1327145nikaa123Vision Program (IOI19_vision)C++20
100 / 100
34 ms7356 KiB
#include <bits/stdc++.h>
#include "vision.h"
using namespace std;

int cur;
vector <vector <int>> d(500);

void get(int n, int k) {
	vector <int> qor(n);
	vector <int> qxor(n);
	vector <int> res;
	for (int i = 0; i < n; i++) {
		qor[i] = ++cur;
		add_or(d[i]);
		qxor[i] = ++cur;
		add_xor(d[i]);
		res.emplace_back(++cur);
		add_xor({qor[i],qxor[i]});
	}
	for (int i = k-1; i < n; i++) {
		vector <int> v;
		for (int j = i-k+1; j <= i; j++) {
			v.emplace_back(qor[j]);
		}
		int nor = ++cur;
		add_or(v);
		int nxor = ++cur;
		add_xor(v);
		res.emplace_back(++cur);
		add_xor({nor,nxor});
	}
	cur++;
	add_or(res);
}

void getans(int n, int m, int k) {
	for (int i = 0; i < n+m; i++) {
		d[i].clear();
	}
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			d[i-j+m-1].emplace_back(i*m+j);
		}
	}
	get(n+m-1,k);
	int cur1 = cur;
	for (int i = 0; i < n+m; i++) {
		d[i].clear();
	}
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			d[i+j].emplace_back(i*m+j);
		}
	}
	get(n+m-1,k);
	int cur2 = cur;
	add_and({cur2,cur1});
	cur++;
}

void construct_network(int H, int W, int K) {
	
	cur = H*W-1;
	getans(H,W,K);
	int cur1 = cur;
	getans(H,W,K+1);
	int cur2 = cur;
	add_xor({cur1,cur2});

}


#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...