제출 #231075

#제출 시각아이디문제언어결과실행 시간메모리
231075tinjyuVision Program (IOI19_vision)C++14
100 / 100
19 ms1856 KiB
#include "vision.h"
#include <iostream>
#include <vector>
using namespace std;
long long int n,m,k,tmp,now,ra[10005],la[10005],rsum[10005][2],lsum[10005][2];
void check(int g)
{
	if(g==n+m-2)
	{
		vector<int> v;
		for(int i=0;i<n*m;i++)v.push_back(i);
		now++;
		add_or(v);
		return ;
	}
	vector<int> v;
	rsum[1][0]=ra[1];
	rsum[ra[0]][1]=ra[ra[0]];
	for(int i=2;i<=ra[0];i++)
	{
		v.clear();
		v.push_back(rsum[i-1][0]);
		v.push_back(ra[i]);
		add_or(v);
		now++;
		rsum[i][0]=now;
	}
	for(int i=ra[0]-1;i>=1;i--)
	{
		v.clear();
		v.push_back(rsum[i+1][1]);
		v.push_back(ra[i]);
		add_or(v);
		now++;
		rsum[i][1]=now;
	}
	for(int i=1;i<=ra[0];i++)
	{
		//cout<<rsum[i][0]<<" "<<rsum[i][1]<<endl; 
	}
	lsum[1][0]=la[1];
	lsum[la[0]][1]=la[la[0]];
	for(int i=2;i<=la[0];i++)
	{
		v.clear();
		v.push_back(lsum[i-1][0]);
		v.push_back(la[i]);
		add_or(v);
		now++;
		lsum[i][0]=now;
	}
	for(int i=la[0]-1;i>=1;i--)
	{
		v.clear();
		v.push_back(lsum[i+1][1]);
		v.push_back(la[i]);
		add_or(v);
		now++;
		lsum[i][1]=now;
	}
	vector<int> v2;
		
	//cout<<g<<endl;
	for(int i=1;i<=ra[0]-g-1;i++)
	{
		v.clear();
		v.push_back(rsum[i][0]);
		v.push_back(rsum[i+g+1][1]);
		add_and(v);
		now++;
		v2.push_back(now);
		//cout<<i<<" "<<now<<endl;
	}
	//cout<<endl;
	add_or(v2);
	now++;
	long long int x=now;
	v2.clear();	

	for(int i=1;i<=la[0]-g-1;i++)
	{
		v.clear();
		v.push_back(lsum[i][0]);
		v.push_back(lsum[i+g+1][1]);
		add_and(v);
		now++;
		v2.push_back(now);
	}
	add_or(v2);
	now++;
	long long int y=now;
	v2.clear();
	v2.push_back(x);
	v2.push_back(y);
	add_or(v2);
	now++;
	add_not(now);
	now++;
}
void construct_network(int H, int W, int K) {
	vector<int> v;
	n=H;
	m=W;
	k=K;
	now=n*m-1;
	for(int i=m;i>=1;i--)
	{
		v.clear();
		long long int x=1,y=i,p=0;
		while(x<=n && y<=m)
		{
			v.push_back((x-1)*m+y-1);
			p++;
			x++;
			y++;
		}
		//for(int i=0;i<p;i++)cout<<v[i]<<" ";
		//cout<<endl;
		tmp=add_or(v);
		now++;
		ra[0]++;
		ra[ra[0]]=now;
	}
	for(int i=2;i<=n;i++)
	{
		v.clear();
		long long int x=i,y=1,p=0;
		while(x<=n && y<=m)
		{
			v.push_back((x-1)*m+y-1);
			p++;
			x++;
			y++;
		}
		//for(int i=0;i<p;i++)cout<<v[i]<<" ";
		//cout<<endl;
		tmp=add_or(v);
		now++;
		ra[0]++;
		ra[ra[0]]=now;
	}
	for(int i=1;i<=m;i++)
	{
		v.clear();
		long long int x=1,y=i,p=0;
		while(x<=n && y>=1)
		{
			v.push_back((x-1)*m+y-1);
			x++;
			y--;
			p++; 
		}
		tmp=add_or(v);
		now++;
		la[0]++;
		la[la[0]]=now;
	}
	for(int i=2;i<=n;i++)
	{
		v.clear();
		long long int x=i,y=m,p=0;
		while(x<=n && y>=1)
		{
			v.push_back((x-1)*m+y-1);
			x++;
			y--;
			p++; 
		}
		tmp=add_or(v);
		now++;
		la[0]++;
		la[la[0]]=now;
	}
	check(k-1);
	long long int x=now;
	check(k);
	long long int y=now;
	//cout<<x<<" "<<y<<endl;
	vector<int>v2;
	v2.push_back(x);
	v2.push_back(y);
	add_xor(v2);
}
#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...