40pts 完全看不出来哪里错了
查看原帖
40pts 完全看不出来哪里错了
1073754
__szh_DNCB__楼主2025/7/1 21:23

傻逼模拟已经花了我半个小时了。

感觉思路和第二篇题解如出一辙,但就是卡在最后两个 Subtask。

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int inf = 0x3f3f3f3f;
struct node{
	int x,y;
}s[55];
int manhatten(node a,node b){
	return abs(a.x - b.x) + abs(b.y - a.y);
}
signed main(){
	int n,k;
	cin >> n >> k;
	for (int i=1;i<=n;i++){
		cin >> s[i].x >> s[i].y;
	}
	if (n == k){
		cout << 0;
		return 0;
	}
	switch (k){
		case 1:{
			int ans = inf;
			for (int i=1;i<=n;i++){
				int maxdis = -inf;
				for (int j=1;j<=n;j++){
					if (j == i)continue;
					int dis = manhatten(s[i],s[j]);
					maxdis = max(maxdis,dis);
				}
				ans = min(ans,maxdis);
			}
			cout << ans;
			break;
		}
		case 2:{
			int ans = inf;
			for (int i=1;i<=n;i++){
				for (int j=1;j<=n;j++){
					int maxdis = -inf;
					if (i == j)continue;
					for (int k=1;k<=n;k++){
						if (k == i || k == j)continue;
						int dis = min(manhatten(s[i],s[k]),manhatten(s[j],s[k]));
						maxdis = max(maxdis,dis);
					}
					ans = min(maxdis,ans);
				}
			}
			cout << ans;
			break;
		}
		default:{
			int ans = inf;
			for (int i=1;i<=n;i++){
				for (int j=1;j<=n;j++){
					if (i == j)continue;
					int maxdis = -inf;
					for (int k=1;k<=n;k++){
						if (k == i || k == j)continue;
						for (int l=1;l<=n;l++){
							if (l == i || l == j || l == k)continue;
							int dis = min(manhatten(s[i],s[l]),min(manhatten(s[j],s[l]),manhatten(s[k],s[l])));
							maxdis = max(maxdis,dis);
						}
					}
					ans = min(maxdis,ans);
				}
			}
			cout << ans;
			break;
		}
	}
	return 0;
}
2025/7/1 21:23
加载中...