제출 #1216791

#제출 시각아이디문제언어결과실행 시간메모리
1216791loiiii12358Vision Program (IOI19_vision)C++20
100 / 100
29 ms4660 KiB
#include "vision.h"
#include <bits/stdc++.h>
using namespace std;

void construct_network(int H, int W, int K) {
	int zero,one;
	vector<int> cur,vec,hd[8],realhd(8),wd[8],realwd(8),add(9),result(9),ans;
	cur.clear();
	for(int i=0;i<H;i++){
		for(int j=0;j<W;j++){
			cur.push_back(i*W+j);
		}
	}
	zero=add_xor(cur);
	one=add_not(zero);
	vec.clear();
	for(int i=0;i<H;i++){
		cur.clear();
		for(int j=0;j<W;j++){
			cur.push_back(i*W+j);
		}
		vec.push_back(add_or(cur));
	}
	for(int i=0;i<H;i++){
		for(int j=0;j<8;j++){
			cur.clear();
			for(int k=0;k<H;k++){
				if(abs(k-i)&(1<<j)){
					cur.push_back(vec[k]);
				}
			}
			if(!cur.empty()){
				hd[j].push_back(add_and({vec[i],add_or(cur)}));
			}
		}
	}
	for(int i=0;i<8;i++){
		if(hd[i].empty()){
			realhd[i]=zero;
		}else{
			realhd[i]=add_or(hd[i]);
		}
	}
	vec.clear();
	for(int i=0;i<W;i++){
		cur.clear();
		for(int j=0;j<H;j++){
			cur.push_back(j*W+i);
		}
		vec.push_back(add_or(cur));
	}
	for(int i=0;i<W;i++){
		for(int j=0;j<8;j++){
			cur.clear();
			for(int k=0;k<W;k++){
				if(abs(k-i)&(1<<j)){
					cur.push_back(vec[k]);
				}
			}
			if(!cur.empty()){
				wd[j].push_back(add_and({vec[i],add_or(cur)}));
			}
		}
	}
	for(int i=0;i<8;i++){
		if(wd[i].empty()){
			realwd[i]=zero;
		}else{
			realwd[i]=add_or(wd[i]);
		}
	}
	add[0]=zero;
	for(int i=0;i<8;i++){
		result[i]=add_xor({add[i],realhd[i],realwd[i]});
		add[i+1]=add_or({add_and({realhd[i],realwd[i]}),add_and({add[i],realwd[i]}),add_and({realhd[i],add[i]})});
	}
	result[8]=add[8];
	for(int i=0;i<9;i++){
		if(K&(1<<i)){
			ans.push_back(add_not(add_xor({one,result[i]})));
		}else{
			ans.push_back(add_not(add_xor({zero,result[i]})));
		}
	}
	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...