제출 #1344067

#제출 시각아이디문제언어결과실행 시간메모리
1344067Muhammad_AneeqVision Program (IOI19_vision)C++20
73 / 100
46 ms9640 KiB
#include "vision.h"
#include "bits/stdc++.h"
using namespace std;
void construct_network(int H, int W, int K) 
{
	vector<vector<int>>ri,le;
	int ctr=H*W;
	for (int i=0;i<H;i++)
	{
		for (int j=0;j<W;j++)
		{
			if (i==0||j==0)
			{
				vector<int>vec;
				for (int k=0;i+k<H&&j+k<W;k++)
					vec.push_back((i+k)*W+j+k);
				add_or(vec);
				le.push_back({i-j,ctr++});
				vec.push_back(ctr-1);
				add_xor(vec);
				le.push_back({i-j,ctr++});
			}
			if (i==0||j==W-1)
			{
				vector<int>vec;
				for (int k=0;i+k<H&&j-k>=0;k++)
				{
					vec.push_back((i+k)*W+j-k);
				}
				add_or(vec);
				ri.push_back({i+j,ctr++});
				vec.push_back(ctr-1);
				add_xor(vec);
				ri.push_back({i+j,ctr++});
			}
		}
	}
	// cout<<le.size()<<' '<<ri.size()<<endl;
	sort(begin(le),end(le));
	sort(begin(ri),end(ri));
	vector<int>les,ris;
	for (int i=0;i+2*(K+1)-1<le.size();i+=2)
	{
		vector<int>f;
		for(int j=i;j<=i+2*K+1;j++)
			f.push_back(le[j][1]);
		add_or(f);
		ctr++;
		add_xor(f);ctr++;
		les.push_back(ctr);
		add_xor({ctr-2,ctr-1});
		ctr++;
	}
	int rl=ctr;
	add_or(les);
	ctr++;
	for (int i=0;i+2*K+1<ri.size();i+=2)
	{
		vector<int>f;
		for(int j=i;j<=i+2*K+1;j++)
			f.push_back(ri[j][1]);
		add_or(f);
		ctr++;
		add_xor(f);ctr++;
		ris.push_back(ctr);
		add_xor({ctr-2,ctr-1});
		ctr++;
	}
	int rr=ctr;
	add_or(ris);
	ctr++;
	int tlr=ctr;
	add_and({rr,rl});
	ctr++;
	{
		vector<int>les,ris;
		for (int i=0;i+2*K-1<le.size();i++)
		{
			vector<int>f;
			for(int j=i;j<=i+2*K-1;j++)
				f.push_back(le[j][1]);
			add_or(f);
			ctr++;
			add_xor(f);ctr++;
			les.push_back(ctr);
			add_xor({ctr-2,ctr-1});
			ctr++;
		}
		int rl1=ctr;
		add_or(les);
		ctr++;
		for (int i=0;i+2*K-1<ri.size();i++)
		{
			vector<int>f;
			for(int j=i;j<=i+2*K-1;j++)
				f.push_back(ri[j][1]);
			add_or(f);
			ctr++;
			add_xor(f);ctr++;
			ris.push_back(ctr);
			add_xor({ctr-2,ctr-1});
			ctr++;
		}
		int rr1=ctr;
		add_or(ris);
		ctr++;
		int tlr1=ctr;
		add_and({rr1,rl1});
		ctr++;
		int ttl=ctr;
		add_xor({tlr,tlr1});
		add_and({tlr,ttl});
	}
}
#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...