제출 #245524

#제출 시각아이디문제언어결과실행 시간메모리
245524vioalbertVision Program (IOI19_vision)C++14
100 / 100
75 ms7540 KiB
#include <bits/stdc++.h>
#include "vision.h"
using namespace std;
typedef long long ll;

const int D = 405;
int h, w;
vector<int> diagL[D], diagR[D], prefL, prefR, ans;

void reset() {
	prefL.clear();
	prefR.clear();
	ans.clear();
}

int solve(int k) {
	reset();
	for(int i = k; i <= h+w-2; i++) {
		prefL.push_back(add_or(diagL[i-k]));
		ans.push_back(add_and({add_or(prefL), add_or(diagL[i])}));
		prefR.push_back(add_or(diagR[i-k]));
		ans.push_back(add_and({add_or(prefR), add_or(diagR[i])}));
	}
	return add_or(ans);
}

void construct_network(int H, int W, int K) {
	h = H, w = W;
	for(int i = 0; i < h; i++) {
		for(int j = 0; j < w; j++) {
			diagL[i+j].push_back(i*w+j);
			diagR[i+(w-j-1)].push_back(i*w+j);
		}
	}
	if(H+W-2 == K) solve(K);
	else add_and({solve(K), add_not(solve(K+1))});
}
#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...