답안 #424837

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
424837 2021-06-12T10:45:49 Z AugustinasJucas Vision Program (IOI19_vision) C++14
0 / 100
20 ms 1848 KB
#include <bits/stdc++.h>
#include "vision.h"
using namespace std;
vector<pair<int, int> > pss = {{-1, 1}, {-1, -1}, {1, 1}, {1, -1}};
vector<pair<int, int> > dists(int e, int s, int k, int n, int m){

	int pe = 0, ps = 0;
	vector<pair<int, int> > ret;
	vector<pair<int, int> > ans;
	for(auto x : pss){
		for(int i = 0; i <= k; i++){
			pe = e + x.first * i;
			ps = s + x.second * (k-i);
			if(pe < 0 || pe >= n || ps < 0 || ps >= m) continue;
			ret.push_back({pe, ps});
		}
	}
	if(ret.size() == 0) return {};
	sort(ret.begin(), ret.end());
	ans.push_back(ret[0]);
	for(int i = 1; i < (int) ret.size(); i++) if(ret[i] != ret[i-1]) ans.push_back(ret[i]);
	return ans;
}
void construct_network(int n, int m, int k) {
		
	if(k == 1){
		int viso = 0;
		for(int i = 0; i < n; i++){
			vector<int> hsh;
			for(int j = 0; j < m; j++){
				hsh.push_back(i * m + j);
			}
			add_xor(hsh);
			add_or(hsh);
			viso += 2;
		}
		for(int i = 0; i < m; i++){
			vector<int> hsh;
			for(int j = 0; j < n; j++){
				hsh.push_back(j * m + i);
			}
			add_xor(hsh);
			add_or(hsh);
			viso += 2;
		}

		int L = viso; int R = viso-1;
		for(int i = 0; i < n + m; i++){
			add_xor({2 * i, 2 * i + 1});
			R++;
		}
		vector<int> last;
		for(int i = L; i <= R; i++) last.push_back(i); 
		add_or(last);
		return ;
	}
	
	
	int viso = 0; int prm = 0; 
	for(int i = 0; i < n; i++){
		for(int j = 0; j < m; j++){
			//cout << i << ", "  << j << endl;
			auto ms = dists(i, j, k, n, m);
			if(ms.size() == 0) continue;
			vector<int> hsh; for(auto x : ms) hsh.push_back(x.first * m + x.second);
			add_or(hsh);
			//cout << "nuo [" << i << "; " << j << "] nutole per " << k << ": "; for(auto x : ms) cout << "{" << x.first << ", " << x.second << "}, "; 
			//cout << endl;
			viso++;
			prm++;
		} 
	}
	if(prm == 0){
		vector<int> ret;
		for(int i = 0; i < n*m; i++) ret.push_back(i);
		add_and(ret);
		return;
	}
	int curInd = n * m;
	for(int i = 0; i < n; i++){
		for(int j = 0; j < m; j++){
			auto ms = dists(i, j, k, n, m);
			if(ms.size() == 0) continue;
			
			vector<int> hsh = {curInd, i *  m + j};
			add_and(hsh);
			curInd++;
			viso++;
		}
	}
	int endd = viso;
	vector<int> hsh;
	for(int i = n * m + prm; i < n*m+endd; i++){
		hsh.push_back(i);
	}
	add_or(hsh);
}


# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 288 KB on inputs (0, 0), (0, 2), expected 0, but computed 1
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 288 KB on inputs (0, 0), (0, 2), expected 0, but computed 1
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 288 KB on inputs (0, 0), (0, 2), expected 0, but computed 1
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 288 KB on inputs (0, 0), (0, 2), expected 0, but computed 1
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 332 KB on inputs (0, 0), (0, 1), expected 1, but computed 0
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 204 KB on inputs (0, 0), (1, 1), expected 0, but computed 1
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 20 ms 1848 KB on inputs (80, 199), (81, 199), expected 1, but computed 0
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 288 KB on inputs (0, 0), (0, 2), expected 0, but computed 1
2 Halted 0 ms 0 KB -