101142024-03-26 23:58:09111Játék a síkoncpp17Időlimit túllépés 45/100600ms5580 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%2==p.y%2;})-v.begin();
	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;
		}
	}
	if(1){
		vector<int>ans1;
		vector<vector<int>>g(N);
		for(int i=0;i<N;i++){
			for(int j=0;j<N;j++){
				if(abs(v[j].x-v[i].x)+abs(v[j].y-v[i].y)==1){
					g[i].push_back(j);
				}
			}
		}
		vector<int>w(N);
		auto bt=[&](auto self,int i)->int{
			if(w[i]){
				return 1;
			}
			w[i]=1;
			for(int j:g[i]){
				if(!self(self,j)){
					w[i]=0;
					return 1;
				}
			}
			w[i]=0;
			return 0;
		};
		for(int i=0;i<N;i++){
			if(!bt(bt,i)){
				ans1.push_back(i);
			}
		}
		if(ans.size()!=ans1.size()){
			ans=ans1;
		}
	}
	cout<<ans.size()<<'\n';
	for(int i:ans){
		cout<<v[i].x<<' '<<v[i].y<<'\n';
	}
	return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1824 KiB
2Időlimit túllépés600ms2464 KiB
subtask29/9
3Elfogadva3ms2364 KiB
4Elfogadva3ms2536 KiB
subtask310/10
5Elfogadva3ms2556 KiB
6Elfogadva2ms2628 KiB
7Elfogadva3ms2764 KiB
8Elfogadva3ms2636 KiB
9Elfogadva3ms2632 KiB
10Elfogadva3ms2760 KiB
11Elfogadva3ms2968 KiB
12Elfogadva3ms3068 KiB
subtask410/10
13Elfogadva6ms3284 KiB
14Elfogadva7ms3696 KiB
15Elfogadva7ms3656 KiB
16Elfogadva8ms3920 KiB
subtask516/16
17Elfogadva10ms4252 KiB
18Elfogadva7ms4092 KiB
19Elfogadva8ms4080 KiB
20Elfogadva9ms4340 KiB
21Elfogadva25ms4316 KiB
subtask60/18
22Elfogadva6ms4304 KiB
23Elfogadva7ms4292 KiB
24Elfogadva7ms4260 KiB
25Elfogadva8ms4276 KiB
26Időlimit túllépés565ms4496 KiB
subtask70/37
27Elfogadva90ms5484 KiB
28Elfogadva90ms5580 KiB
29Időlimit túllépés555ms4556 KiB
30Időlimit túllépés546ms4652 KiB
31Időlimit túllépés573ms4716 KiB
32Időlimit túllépés573ms4656 KiB
33Időlimit túllépés577ms4080 KiB
34Időlimit túllépés580ms4220 KiB
35Időlimit túllépés541ms4308 KiB
36Időlimit túllépés556ms4576 KiB
37Időlimit túllépés564ms4632 KiB
38Időlimit túllépés573ms4732 KiB
39Időlimit túllépés564ms4672 KiB
40Időlimit túllépés545ms4584 KiB
41Időlimit túllépés554ms5004 KiB
42Időlimit túllépés546ms4960 KiB