Submission #1337639

#TimeUsernameProblemLanguageResultExecution timeMemory
1337639enzyVision Program (IOI19_vision)C++20
100 / 100
40 ms8592 KiB
#include "vision.h"
#include<bits/stdc++.h>
#define pii pair<int,int>
#define sz(v) (int)(v.size())
#define fi first
#define se second
using namespace std;

void construct_network(int H, int W, int K){
	cerr << H << ' ' << W << ' ' << K << '\n';
	vector<int>vdiagr[H+W], vdiagl[H+W], diagr(H+W), diagl(H+W);
	for(int i=0;i<H;i++){
		for(int j=0;j<W;j++){
			int atr=i+j, atl=i-j+(W-1);
			vdiagr[atr].push_back({i*W+j});
			vdiagl[atl].push_back({i*W+j});
		}
	}

	// cerr << H+W << '\n';

	for(int i=0;i<H+W-1;i++){
		// cerr << "! " << i << '\n';
		diagr[i]=add_or(vdiagr[i]);
		diagl[i]=add_or(vdiagl[i]);
		// cerr << "!!!\n";
	}

	auto get1=[&](vector<int> x){
		int a=add_or(x), b=add_xor(x);
		return add_and({a,b});
	};
	auto get2=[&](vector<int> x){
		int a=add_or(x), b=add_xor(x);
		return add_xor({a,b});
	};

	vector<int>and_dps, or_dps;

	for(int i=0;i+K<H+W-1;i++){
		vector<int>atll, atlr, atrl, atrr;
		for(int j=0;j<i;j++) atll.push_back(diagl[j]), atlr.push_back(diagr[j]);
		// for(int j=i;j<=i+K;j++) atl.push_back(diagl[j]), atr.push_back(diagr[j]);
		for(int j=i+K+1;j<H+W-1;j++) atrl.push_back(diagl[j]), atrr.push_back(diagr[j]);
		// cerr << "? " << i << '\n';
		if(sz(atll)&&sz(atrl)) and_dps.push_back(add_and({get1(atll),get1(atrl)})); 
		if(sz(atlr)&&sz(atrr)) and_dps.push_back(add_and({get1(atlr),get1(atrr)}));
		or_dps.push_back(get2({diagl[i],diagl[i+K]})); or_dps.push_back(get2({diagr[i],diagr[i+K]}));
	}

	if(!sz(and_dps)){
		int last=add_or(or_dps);
		return;
	}

	int x=add_not(add_or(and_dps)), y=add_or(or_dps);
	int last=add_and({x,y});
}
#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...