Submission #1291207

#TimeUsernameProblemLanguageResultExecution timeMemory
1291207LudisseyVision Program (IOI19_vision)C++20
100 / 100
7 ms2932 KiB
#include "vision.h"
#include <bits/stdc++.h>
#define sz(a) (int)a.size()
#define all(a) a.begin(), a.end()
#define rall(a) a.rbegin(), a.rend()
int h,w;
using namespace std;

const int LOG=9;

int conv(int i, int j){
	return (j+i*w);
}


void construct_network(int H, int W, int K) {
	h=H;
	w=W;
	vector<int> row;
	vector<int> col;
	for (int i = 0; i < H; i++)
	{
		vector<int> add;
		for (int j = 0; j < W; j++) add.push_back(conv(i,j));
		row.push_back(add_xor(add)); 
	}
	for (int j = 0; j < W; j++)
	{
		vector<int> add;
		for (int i = 0; i < H; i++) add.push_back(conv(i,j));
		col.push_back(add_xor(add));
	}
	int lst=-1;
	vector<int> distLOG(LOG,-1);
	for (int i = 0; i < H; i++)
	{
		int ex=0;
		if(lst==-1) lst=row[i];
		else lst=add_xor({lst,row[i]});
		ex=lst;
		for (int j = 0; j < LOG; j++)
		{
			int nex=-1;
			if(ex==-1) continue;
			if(distLOG[j]==-1) distLOG[j]=ex;
			else {
				nex=add_and({distLOG[j],ex});
				distLOG[j]=add_xor({ex,distLOG[j]});
			}
			ex=nex;
		}
		
	}
	lst=-1;
	for (int i = 0; i < W; i++)
	{
		int ex=0;
		if(lst==-1) lst=col[i];
		else lst=add_xor({lst,col[i]});
		ex=lst;
		for (int j = 0; j < LOG; j++)
		{
			int nex=-1;
			if(ex==-1) continue;
			if(distLOG[j]==-1) distLOG[j]=ex;
			else {
				nex=add_and({distLOG[j],ex});
				distLOG[j]=add_xor({ex,distLOG[j]});
			}
			ex=nex;
		}
	}
	vector<int> mst;
	vector<int> nt;
	for (int j = 0; j < LOG; j++)
	{
		if(K&(1<<j)) {
			if(distLOG[j]==-1) { add_and({0,add_not(0)}); return; }
			mst.push_back(distLOG[j]);
		}else{
			if(distLOG[j]==-1) continue;
			nt.push_back(distLOG[j]);
		}
	}
	add_and({add_and(mst), add_not({add_or(nt)})});
}
#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...