Submission #431207

#TimeUsernameProblemLanguageResultExecution timeMemory
431207CSQ31Vision Program (IOI19_vision)C++17
55 / 100
12 ms1120 KiB
#include "vision.h"
#include <bits/stdc++.h>
using namespace std;
int dx[4] = {1,1,-1,-1};
int dy[4] = {-1,1,1,-1};
void construct_network(int H, int W, int K) {
	if(max(H,W) <= 10 || min(H,W) == 1){
		vector<int>fin;
		int cnt = H*W;
		for(int i=0;i<H;i++){
			for(int j=0;j<W;j++){
				for(int k=0;k<=K;k++){
					for(int q=0;q<4;q++){
						int x = i+dx[q]*k;
						int y = j+dy[q]*(K-k);
						if(x>=0 && y>=0 && x<H && y<W){
							if(x*W+y > i*W+j){
							add_and({x*W +y,i*W+j});
							fin.push_back(cnt++);
						}
						}
					}
				}
			}
		}
		add_or(fin);
		return;
	}
	else if(K==1){
		int cnt = H*W-1;
		for(int i=0;i<H;i++){
			vector<int>v;
			for(int j=0;j<W;j++){
				v.push_back(i*W+j);
			}
			add_xor(v);
			cnt++;
		}
		//first W are row xor
		//H+w are col xor
		for(int i=0;i<W;i++){
			vector<int>v;
			for(int j=0;j<H;j++){
				v.push_back(j*W+i);
			}
			add_xor(v);
			cnt++;
		}
		//H*W -> H*w+H-1;
		//H*W+H ->H*W+H+W-1;
		vector<int>rnot,rgap;
		vector<int>cnot,cgap;
		for(int i=0;i<H;i++){
			add_not(H*W+i);
			rnot.push_back(++cnt);
		}
		for(int j=0;j<W;j++){
			add_not(H*W+H+j);
			cnot.push_back(++cnt);
		}
		for(int i=0;i<H;i++){
			if(i){
				add_and({H*W+i,H*W+i-1});
				rgap.push_back(++cnt);
			}
		}
		for(int i=0;i<W;i++){
			if(i){
				add_and({H*W+H+i,H*W+H+i-1});
				cgap.push_back(++cnt);
			}
		}
		int a=++cnt;
		int b=++cnt;
		int c=++cnt;
		int d=++cnt;
		add_and(rnot);
		add_and(cnot);
		add_or(rgap);
		add_or(cgap);
		add_and({a,d});
		add_and({b,c});
		
		cnt++;
		cnt++;
		add_or({cnt,cnt-1});
	}else{
		vector<int>fin;
		int cnt = H*W;
		int i = 0;
		int j = 0;
		for(int k=0;k<=K;k++){
				for(int q=0;q<4;q++){
					int x = i+dx[q]*k;
					int y = j+dy[q]*(K-k);
					if(x>=0 && y>=0 && x<H && y<W){
						if(x*W+y > i*W+j){
						add_and({x*W +y,i*W+j});
						fin.push_back(cnt++);
					}
				}
			}
		}
		add_or(fin);
	}
}
#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...