10117 2024. 03. 27 11:33:06 111 Játék a síkon cpp17 Elfogadva 100/100 293ms 6488 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long

struct P{
	int x,y;
};

bool kuhn(vector<vector<int>>& g, vector<int>& b, int i) {
	vector<int> v(g.size());
	auto dfs = [&](auto self, int i) {
		if (v[i]) {
			return 0;
		}
		v[i] = 1;
		for (int j : g[i]) {
			if (b[j] == -2) {
				continue;
			}
			if (b[j] == -1 || self(self, b[j])) {
				b[j] = i;
				return 1;
			}
		}
		return 0;
	};
	return dfs(dfs, i);
}

signed main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	int N;
	cin>>N;
	vector<P>v(N);
	for(int i=0;i<N;i++){
		cin>>v[i].x>>v[i].y;
	}
	int p=partition(v.begin(),v.end(),[&](P p){return (p.x&1)==(p.y&1);})-v.begin(); // -5 % 2 = -1
	vector<vector<int>>g(p),gg(N-p);
	for(int i=0;i<p;i++){
		for(int j=p;j<N;j++){
			if(abs(v[j].x-v[i].x)+abs(v[j].y-v[i].y)==1){
				g[i].push_back(j-p);
				gg[j-p].push_back(i);
			}
		}
	}
	vector<int>b(N-p,-1),bb(p,-1);
	for(int i=0;i<p;i++){
		kuhn(g,b,i);
	}
	for(int i=0;i<N-p;i++){
		kuhn(gg,bb,i);
	}
	vector<int>ans;
	for(int i=0;i<N-p;i++){
		if(b[i]==-1){
			ans.push_back(p+i);
			continue;
		}
		int x=b[i];
		b[i]=-2;
		if(kuhn(g,b,x)){
			ans.push_back(p+i);
			b[i]=-1;
		}
		else{
			b[i]=x;
		}
	}
	for(int i=0;i<p;i++){
		if(bb[i]==-1){
			ans.push_back(i);
			continue;
		}
		int x=bb[i];
		bb[i]=-2;
		if(kuhn(gg,bb,x)){
			ans.push_back(i);
			bb[i]=-1;
		}
		else{
			bb[i]=x;
		}
	}
	cout<<ans.size()<<'\n';
	for(int i:ans){
		cout<<v[i].x<<' '<<v[i].y<<'\n';
	}
	return 0;
}
Részfeladat Összpont Teszt Verdikt Idő Memória
subtask1 0/0
1 Elfogadva 3ms 1824 KiB
2 Elfogadva 7ms 2276 KiB
subtask2 9/9
3 Elfogadva 3ms 2264 KiB
4 Elfogadva 3ms 2480 KiB
subtask3 10/10
5 Elfogadva 3ms 2588 KiB
6 Elfogadva 3ms 2668 KiB
7 Elfogadva 3ms 2808 KiB
8 Elfogadva 3ms 3040 KiB
9 Elfogadva 3ms 3108 KiB
10 Elfogadva 3ms 3240 KiB
11 Elfogadva 3ms 3332 KiB
12 Elfogadva 3ms 3456 KiB
subtask4 10/10
13 Elfogadva 4ms 3656 KiB
14 Elfogadva 4ms 3844 KiB
15 Elfogadva 4ms 4064 KiB
16 Elfogadva 4ms 4212 KiB
subtask5 16/16
17 Elfogadva 4ms 4308 KiB
18 Elfogadva 4ms 4376 KiB
19 Elfogadva 4ms 4380 KiB
20 Elfogadva 4ms 4512 KiB
21 Elfogadva 8ms 4660 KiB
subtask6 18/18
22 Elfogadva 4ms 4632 KiB
23 Elfogadva 4ms 4556 KiB
24 Elfogadva 4ms 4568 KiB
25 Elfogadva 4ms 4584 KiB
26 Elfogadva 4ms 4700 KiB
subtask7 37/37
27 Elfogadva 20ms 5312 KiB
28 Elfogadva 19ms 5328 KiB
29 Elfogadva 68ms 5680 KiB
30 Elfogadva 293ms 5756 KiB
31 Elfogadva 131ms 5780 KiB
32 Elfogadva 21ms 5764 KiB
33 Elfogadva 32ms 5344 KiB
34 Elfogadva 54ms 5352 KiB
35 Elfogadva 39ms 5368 KiB
36 Elfogadva 24ms 6008 KiB
37 Elfogadva 41ms 6244 KiB
38 Elfogadva 26ms 6204 KiB
39 Elfogadva 75ms 6332 KiB
40 Elfogadva 83ms 6384 KiB
41 Elfogadva 134ms 6452 KiB
42 Elfogadva 86ms 6488 KiB