Submission #144269

#TimeUsernameProblemLanguageResultExecution timeMemory
144269TadijaSebezVision Program (IOI19_vision)C++14
100 / 100
38 ms3704 KiB
#include "vision.h"
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
const int N=405;
int n,m,k;
int d1[N],d2[N],x1[N],x2[N];
int Get(int x, int y){ return (x-1)*m+y-1;}
int Get(pair<int,int> p){ return Get(p.first,p.second);}
bool Valid(int x, int y){ return x>=1 && x<=n && y>=1 && y<=m;}
bool Valid(pair<int,int> p){ return Valid(p.first,p.second);}
void construct_network(int H, int W, int K)
{
	n=H;m=W;k=K;
	pair<int,int> fir={1,m};
	int l1=0,l2=0;
	while(++l1)
	{
		vector<int> diag;
		pair<int,int> cur=fir;
		do
		{
			diag.pb(Get(cur));
			cur.first++;
			cur.second++;
		}while(Valid(cur));
		d1[l1]=add_or(diag);
		x1[l1]=add_not(add_xor(diag));
		if(fir.second==1) fir.first++;
		else fir.second--;
		if(!Valid(fir)) break;
	}
	fir={n,m};
	while(++l2)
	{
		vector<int> diag;
		pair<int,int> cur=fir;
		do
		{
			diag.pb(Get(cur));
			cur.first++;
			cur.second--;
		}while(Valid(cur));
		d2[l2]=add_or(diag);
		x2[l2]=add_not(add_xor(diag));
		if(fir.first==1) fir.second--;
		else fir.first--;
		if(!Valid(fir)) break;
	}
	vector<int> _or;
	for(int i=1;i+k<=l1;i++) _or.pb(add_and({d1[i],d1[i+k]}));
	int eq=add_or(_or);
	_or.clear();
	for(int i=1;i<=l2;i++)
	{
		vector<int> tmp;
		for(int j=i+1;j<=min(i+k,l2);j++) tmp.pb(d2[j]);
		tmp.pb(x2[i]);
		_or.pb(add_and({d2[i],add_or(tmp)}));
	}
	int le=add_or(_or);
	int f=add_and({eq,le});
	_or.clear();
	for(int i=1;i+k<=l2;i++) _or.pb(add_and({d2[i],d2[i+k]}));
	eq=add_or(_or);
	_or.clear();
	for(int i=1;i<=l1;i++)
	{
		vector<int> tmp;
		for(int j=i+1;j<=min(i+k,l1);j++) tmp.pb(d1[j]);
		tmp.pb(x1[i]);
		_or.pb(add_and({d1[i],add_or(tmp)}));
	}
	le=add_or(_or);
	int s=add_and({eq,le});
	add_or({f,s});
}
#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...