제출 #1344039

#제출 시각아이디문제언어결과실행 시간메모리
1344039Jawad_Akbar_JJVision Program (IOI19_vision)C++20
100 / 100
8 ms1348 KiB
#include <iostream>
#include "vision.h"

using namespace std;

vector<int> get1(int i, int j, int n, int m){
	vector<int> v;
	while (i < n and m > j and min(i, j) >= 0){
		v.push_back(i * m + j);
		i++, j--;
	}
	return v;
}

vector<int> get2(int i, int j, int n, int m){
	vector<int> v;
	while (i < n and m > j and min(i, j) >= 0){
		v.push_back(i * m + j);
		i++, j++;
	}
	return v;
}

void construct_network(int n, int m, int k){
	vector<int> v1, v2, v3, v4;
	for (int i=0;i<m;i++)
		v1.push_back(add_or(get1(0, i, n, m)));
	for (int i=1;i<n;i++)
		v1.push_back(add_or(get1(i, m-1, n, m)));

	for (int i=n-1;i>=0;i--)
		v2.push_back(add_or(get2(i, 0, n, m)));
	for (int i=1;i<m;i++)
		v2.push_back(add_or(get2(0, i, n, m)));



	for (int i=k;i<v1.size();i++){
		v3.push_back(add_and({v1[i], v1[i - k]}));
		v3.push_back(add_and({v2[i], v2[i - k]}));
	}

	for (int i=k+1;i<v1.size();i++){
		v4.push_back(add_and({v1[i], v1[i - k - 1]}));
		v1[i - k] = add_or({v1[i-k-1], v1[i-k]});

		v4.push_back(add_and({v2[i], v2[i - k - 1]}));
		v2[i - k] = add_or({v2[i-k-1], v2[i-k]});
	}

	if (v4.size() == 0)
		add_or(v3);
	else
		add_and({add_or(v3), add_not(add_or(v4))});
}
#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...