Submission #1226976

#TimeUsernameProblemLanguageResultExecution timeMemory
1226976irmuunVision Program (IOI19_vision)C++20
59 / 100
24 ms4288 KiB
#include "vision.h"
#include <bits/stdc++.h>

using namespace std;

#define ll long long
#define pb push_back
#define ff first
#define ss second
#define all(s) s.begin(),s.end()
#define rall(s) s.rbegin(),s.rend()

void construct_network(int H,int W,int K){
	vector<int>l[H+W];
	for(int i=0;i<H;i++){
		for(int j=0;j<W;j++){
			l[i+j].pb(i*W+j);
		}
	}
	int cur=H*W-1;
	vector<int>L,L2;
	//0 - H+W-2
	for(int i=0;i<=H+W-2;i++){
		add_or(l[i]); cur++;
		L.pb(cur);
		add_xor(l[i]); cur++;
		add_not(cur); cur++;
		add_and({cur,cur-2}); cur++;
		L2.pb(cur);
	}
	vector<int>r[H+W];
	for(int i=0;i<H;i++){
		for(int j=0;j<W;j++){
			r[i-j+(W-1)].pb(i*W+j);
		}
	}
	vector<int>R,R2;
	for(int i=0;i<=H+W-2;i++){
		add_or(r[i]); cur++;
		R.pb(cur);
		add_xor(r[i]); cur++;
		add_not(cur); cur++;
		add_and({cur,cur-2}); cur++;
		R2.pb(cur);
	}
	vector<int>v[2];
	for(int i=K;i<=H+W-2;i++){
		vector<int>Ns,N2s;
		for(int j=i-K;j<=i;j++){
			Ns.pb(L[j]);
		}
		for(int j=i-K;j<=i;j++){
			N2s.pb(L2[j]);
		}
		add_or(Ns); cur++;
		add_xor(Ns); cur++;
		add_not(cur); cur++;
		add_and({cur,cur-2}); cur++;
		add_or(N2s); cur++;
		add_or({cur,cur-1}); cur++;
		v[0].pb(cur);
	}
	for(int i=K;i<=H+W-2;i++){
		vector<int>Ns,N2s;
		for(int j=i-K;j<=i;j++){
			Ns.pb(R[j]);
		}
		for(int j=i-K;j<=i;j++){
			N2s.pb(R2[j]);
		}
		add_or(Ns); cur++;
		add_xor(Ns); cur++;
		add_not(cur); cur++;
		add_and({cur,cur-2}); cur++;
		add_or(N2s); cur++;
		add_or({cur,cur-1}); cur++;
		v[1].pb(cur);
	}
	vector<int>u[2];
	for(int i=K-1;i<=H+W-2;i++){
		vector<int>Ns,N2s;
		for(int j=i-K+1;j<=i;j++){
			Ns.pb(L[j]);
		}
		for(int j=i-K+1;j<=i;j++){
			N2s.pb(L2[j]);
		}
		add_or(Ns); cur++;
		add_xor(Ns); cur++;
		add_not(cur); cur++;
		add_and({cur,cur-2}); cur++;
		add_or(N2s); cur++;
		add_or({cur,cur-1}); cur++;
		u[0].pb(cur);
	}
	for(int i=K-1;i<=H+W-2;i++){
		vector<int>Ns,N2s;
		for(int j=i-K+1;j<=i;j++){
			Ns.pb(R[j]);
		}
		for(int j=i-K+1;j<=i;j++){
			N2s.pb(R2[j]);
		}
		add_or(Ns); cur++;
		add_xor(Ns); cur++;
		add_not(cur); cur++;
		add_and({cur,cur-2}); cur++;
		add_or(N2s); cur++;
		add_or({cur,cur-1}); cur++;
		u[1].pb(cur);
	}
	add_or(v[0]); cur++;
	add_or(v[1]); cur++;
	add_and({cur,cur-1}); cur++;
	add_or(u[0]); cur++;
	add_or(u[1]); cur++;
	add_and({cur,cur-1}); cur++;
	add_not(cur); cur++;
	add_and({cur,cur-4});
}
#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...