제출 #1237128

#제출 시각아이디문제언어결과실행 시간메모리
1237128AMnuVision Program (IOI19_vision)C++20
100 / 100
8 ms1732 KiB
#include "vision.h"
#include <bits/stdc++.h>
using namespace std;

const int LOG=9;
int N, M, P;
int ans[LOG];

void sum() {
	int S=P, T;
	for (int i=0;i<LOG;i++) {
		T=add_and({S,ans[i]});
		ans[i]=add_xor({S,ans[i]});
		S=T;
	}
}

void row(int x) {
	vector <int> V={P};
	for (int i=0;i<M;i++) {
		V.push_back(x*M+i);
	}
	P=add_xor(V);
	sum();
}

void col(int x) {
	vector <int> V={P};
	for (int i=0;i<N;i++) {
		V.push_back(i*M+x);
	}
	P=add_xor(V);
	sum();
}

void build(int H,int W) {
	N=H;
	M=W;
	P=add_and({0,add_not(0)});
	for (int i=0;i<LOG;i++) {
		ans[i]=P;
	}
}

void prefix() {
	for (int i=0;i<N;i++) {
		row(i);
	}
	for (int i=0;i<M;i++) {
		col(i);
	}
}

void equal(int K) {
	int S=P;
	for (int i=0;i<LOG;i++) {
		if ((K>>i)&1) {
			ans[i]=add_not(ans[i]);
		}
		S=add_or({S,ans[i]});
	}
	add_not(S);
}

void construct_network(int H,int W,int K) {
	build(H,W);
	prefix();
	equal(K);
}
#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...