Submission #1344414

#TimeUsernameProblemLanguageResultExecution timeMemory
1344414po_rag526Vision Program (IOI19_vision)C++20
100 / 100
18 ms3600 KiB
#include "vision.h"
#include <bits/stdc++.h>
using namespace std;
void construct_network(int h,int w,int k)
{
	vector<int> dig1,dig2;
	map<int,vector<int>> sm,sb;
	for(int i=0;i<h;i++)
	{
		for(int j=0;j<w;j++)
		{
			sm[i+j].push_back(i*w+j);
			sb[i-j].push_back(i*w+j);
		}
	}
	for(auto tt:sm)
	{
		dig1.push_back(add_or(tt.second));
	}
	for(auto tt:sb)
	{
		dig2.push_back(add_or(tt.second));
	}
	vector<int> o1=dig1,o2=dig2;
	// for(int i=dig1.size()-2;i>=0;i--)
	// 	dig1[i]=add_or({dig1[i],dig1[i+1]});
	// for(int i=dig2.size()-2;i>=0;i--)
	// 	dig2[i]=add_or({dig2[i],dig2[i+1]});
	int gk=0;
	// check if exact k 
	for(int i=0;i<dig1.size();i++)
	{
		if(i+k<dig1.size())
		{
			if(!gk)gk=add_and({o1[i],o1[i+k]});
			else gk=add_or({gk,add_and({o1[i],o1[i+k]})});
		}
		if(i+k<dig2.size())
		{
			if(!gk)gk=add_and({o2[i],o2[i+k]});
			else gk=add_or({gk,add_and({o2[i],o2[i+k]})});
		}
	}
	// check if atmost k
	// >=k+1
	// <k+1
	// <=k
	int akm=0,val=0;
	for(int i=0;i<dig1.size();i++)
	{
		vector<int> cur;
		for(int p=i+k+1;p<dig1.size();p++)
		{
			cur.push_back(o1[p]);
		}
		if(cur.size())
		{
			val=add_and({o1[i],add_or(cur)});
			if(!akm)akm=val;
			else akm=add_or({akm,val});
		}

		cur.clear();
		for(int p=i+k+1;p<dig2.size();p++)
		{
			cur.push_back(o2[p]);
		}
		if(cur.size())
		{
			val=add_and({o2[i],add_or(cur)});
			if(!akm)akm=val;
			else akm=add_or({akm,val});
		}
	}
	if(!akm)
	{
		add_or({gk});
	}
	else
	{
		add_and({gk,add_not(akm)});		
	}
	return;	
}
#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...