Submission #1221683

#TimeUsernameProblemLanguageResultExecution timeMemory
1221683VMaksimoski008Vision Program (IOI19_vision)C++20
0 / 100
1 ms1476 KiB
#include "vision.h"
#include <bits/stdc++.h>
using namespace std;

int id[205][205], c = 0;

void construct_network(int n, int m, int k) {
	for(int i=0; i<n; i++)
		for(int j=0; j<m; j++)
			id[i][j] = c++;

	//2 * 30
	vector<int> row, col;
	for(int i=0; i<n; i++) {
		vector<int> ask;
		for(int j=0; j<m; j++) ask.push_back(id[i][j]);
		row.push_back(add_or(ask));
	}

	for(int j=0; j<m; j++) {
		vector<int> ask;
		for(int i=0; i<n; i++) ask.push_back(id[i][j]);
		col.push_back(add_or(ask));
	}

	vector<int> row_d[n];
	for(int i=0; i<n; i++) {
		for(int j=i; j<n; j++) {
			row_d[j-i].push_back(add_and({ row[i], row[j] }));
		}
	}

	vector<int> col_d[m];
	for(int i=0; i<m; i++) {
		for(int j=i; j<m; j++) {
			col_d[j-i].push_back(add_and({ col[i], col[j] }));
		}
	}

	vector<int> is_row(n), is_col(m);
	for(int i=0; i<n; i++) is_row[i] = add_or(row_d[i]);
	for(int j=0; j<m; j++) is_col[j] = add_or(col_d[j]);

	vector<int> vec;
	for(int i=0; i<n; i++)
		if(k-i < m) vec.push_back(add_and({ is_row[i], is_col[k-i] }));
	add_or(vec);
}
#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...