Submission #1216603

#TimeUsernameProblemLanguageResultExecution timeMemory
1216603brintonVision Program (IOI19_vision)C++20
100 / 100
16 ms2888 KiB
#include <bits/stdc++.h>
#include "vision.h"

using namespace std;
int distK(vector<int> v,int K){
	vector<int> cur;
	for(int i = 0;i + K < v.size();i++){
		cur.push_back(add_and({v[i],v[i+K]}));
	}
	return add_or(cur);
}
int lessK(vector<int> v,int K){
	vector<int> ret;
	for(int i = 0;i + K < v.size();i++){
		vector<int> cur;
		for(int d = 0;d <= K;d++){
			cur.push_back({v[i+d]});
		}
		ret.push_back(add_and({add_or(cur),add_not(add_xor(cur))}));
	}
	return add_or(ret);
}
void construct_network(int H, int W, int K) {

	auto id = [&](int i,int j){
		return i*W+j;
	};
	auto dist = [](int i1,int i2,int j1,int j2){
		return abs(i1-i2)+abs(j1-j2);
	};
	vector<int> diagnal1;// top_right to bottom_down
	for(int d = 0;d < H+W-1;d++){
		int si,sj;
		if(d < W){
			si = 0,sj = d;
		}else{
			si = d-W+1,sj = W-1;
		}
		vector<int> cur;
		while(si >= 0 && sj >= 0 && si < H && sj < W){
			cur.push_back(id(si,sj));
			sj--;
			si++;
		}
		diagnal1.push_back(add_or(cur));
	}
	vector<int> diagnal2;// top_right to bottom_down
	for(int d = 0;d < H+W-1;d++){
		int si,sj;
		if(d < W){
			si = 0,sj = W-1-d;
		}else{
			si = d-W+1,sj = 0;
		}
		vector<int> cur;
		while(si >= 0 && sj >= 0 && si < H && sj < W){
			cur.push_back(id(si,sj));
			sj++;
			si++;
		}
		diagnal2.push_back(add_or(cur));
	}

	int d1K = distK(diagnal1,K);
	int d2K = distK(diagnal2,K);
	int d1lessK = lessK(diagnal1,K);
	int d2lessK = lessK(diagnal2,K);
	int samed1 = add_xor(diagnal1);
	int samed2 = add_xor(diagnal2);

	int case1 = add_and({d1K,d2K});
	int case2 = add_and({d1K,d2lessK});
	int case3 = add_and({d1lessK,d2K});
	int case4 = add_and({d1K,samed2});
	int case5 = add_and({samed1,d2K});
	add_or({case1,case2,case3,case4,case5});
}
#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...