제출 #1237941

#제출 시각아이디문제언어결과실행 시간메모리
1237941Muhammad_AneeqVision Program (IOI19_vision)C++17
12 / 100
10 ms1864 KiB
#include "vision.h"
#include <bits/stdc++.h>
using namespace std;
void construct_network(int n, int m, int k) 
{
		map<int,vector<int>>sl,sl1;
		map<int,int>ind,ind1;
		for (int i=0;i<n;i++)
		{
			for (int j=0;j<m;j++)
			{
				sl[i+j].push_back(i*m+j);
				sl1[i-j].push_back(i*m+j);
			}
		}
		set<int>s,s1;
		for (auto [i,j]:sl)
		{
			ind[i]=add_or(j);
			s.insert(i);
		}
		for (auto [i,j]:sl1)
		{
			s1.insert(i);
			ind1[i]=add_or(j);
		}
		vector<int>nx;
		for (auto i:s)
		{
			if (s.find(i+k)==s.end()) continue;
			vector<int>x;
			for (int j=i-k;j<=i+k;j++)
			{
				if (s1.find(j)!=s1.end())
					x.push_back(ind1[j]);
			}
			if (x.size()==0)
			{
				nx.push_back(add_and({ind[i],ind[i+k]}));
				continue;
			}
			int g=add_or(x);
			nx.push_back(add_and({g,ind[i],ind[i+k]}));
		}
		for (auto i:s1)
		{
			if (s1.find(i+k)==s1.end()) continue;
			vector<int>x;
			for (int j=i-k;j<=i+k;j++)
			{
				if (s.find(j)!=s.end())
					x.push_back(ind[j]);
			}
			if (x.size()==0)
			{
				nx.push_back(add_and({ind1[i],ind1[i+k]}));
				continue;
			}
			int g=add_or(x);
			nx.push_back(add_and({g,ind1[i],ind1[i+k]}));
		}
		add_or(nx);
		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...