101102024-03-26 22:52:59111Játék a síkoncpp17Hibás válasz 0/100575ms6224 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 x) {
	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;
	};
	for (int i = 0; i < g.size(); i++) {
		if (dfs(dfs, i)) {
			return true;
		}
	}
	return false;
}

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;
		}
	}
	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
2Hibás válasz25ms2252 KiB
subtask20/9
3Hibás válasz3ms2228 KiB
4Elfogadva3ms2440 KiB
subtask30/10
5Elfogadva3ms2660 KiB
6Elfogadva3ms2872 KiB
7Elfogadva3ms2956 KiB
8Hibás válasz3ms3080 KiB
9Elfogadva3ms3164 KiB
10Hibás válasz3ms3296 KiB
11Hibás válasz3ms3392 KiB
12Hibás válasz3ms3528 KiB
subtask40/10
13Elfogadva4ms3916 KiB
14Hibás válasz12ms3944 KiB
15Hibás válasz17ms3944 KiB
16Hibás válasz16ms3952 KiB
subtask50/16
17Hibás válasz14ms4156 KiB
18Hibás válasz17ms4240 KiB
19Hibás válasz10ms4228 KiB
20Hibás válasz10ms4224 KiB
21Elfogadva18ms4472 KiB
subtask60/18
22Elfogadva4ms4296 KiB
23Hibás válasz13ms4568 KiB
24Hibás válasz12ms4784 KiB
25Hibás válasz14ms4744 KiB
26Hibás válasz16ms4884 KiB
subtask70/37
27Hibás válasz137ms5372 KiB
28Elfogadva64ms5588 KiB
29Időlimit túllépés568ms4832 KiB
30Időlimit túllépés526ms4764 KiB
31Időlimit túllépés575ms6156 KiB
32Hibás válasz490ms5804 KiB
33Hibás válasz92ms5308 KiB
34Hibás válasz92ms5308 KiB
35Hibás válasz92ms5556 KiB
36Időlimit túllépés566ms4880 KiB
37Időlimit túllépés564ms5008 KiB
38Időlimit túllépés565ms4964 KiB
39Időlimit túllépés570ms6224 KiB
40Időlimit túllépés556ms4960 KiB
41Időlimit túllépés558ms4960 KiB
42Időlimit túllépés565ms4960 KiB