Submission #1053189

#TimeUsernameProblemLanguageResultExecution timeMemory
1053189amirhoseinfar1385Vision Program (IOI19_vision)C++17
100 / 100
29 ms7584 KiB
#include "vision.h"
#include<bits/stdc++.h>
using namespace std;
int n,m;
const int maxn=400+10;

int solve(int k){
	vector<int>all0[maxn],all1[maxn],ps0,ps1;
	for(int i=0;i<n;i++){
		for(int j=0;j<m;j++){
			all0[i+j].push_back(i*m+j);
			all1[i+(m-j-1)].push_back(i*m+j);
		}
	}
	vector<int>ret;
	for(int i=k;i<=n+m-2;i++){
	//	cout<<i<<" "<<(int)all0[i-k].size()<<" "<<all1[i-k].size()<<" "<<(int)all0[i].size()<<" "<<(int)all1[i].size()<<endl;
		ps0.push_back(add_or(all0[i-k]));
		ps1.push_back(add_or(all1[i-k]));
		ret.push_back(add_and({add_or(all0[i]),add_or(ps0)}));
		ret.push_back(add_and({add_or(all1[i]),add_or(ps1)}));
	}
/*	cout<<"vorod"<<endl;
	for(auto x:ps0){
		cout<<"wtf0: "<<x<<endl;
	}
	for(auto x:ps1){
		cout<<"wtf1: "<<x<<endl;
	}
	cout<<"khor"<<endl;*/
	return add_or(ret);
}

void construct_network(int H, int W, int fas) {
	n=H;
	m=W;
	if(fas==(n+m-2)){
		solve(fas);
	}else{
		add_and({solve(fas),add_not(solve(fas+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...