关于春测T3做法
  • 板块灌水区
  • 楼主学校你刘哥
  • 当前回复3
  • 已保存回复3
  • 发布时间2023/3/5 14:46
  • 上次更新2023/10/23 22:58:47
查看原帖
关于春测T3做法
355069
学校你刘哥楼主2023/3/5 14:46

直接贪心,每次找距离当前点最近的点,期望能拿多少分?

#include<bits/stdc++.h>
#define N 1010
using namespace std;
const double INF=999999999;
int n,vis[N],k,_max=-114514;
double x[N],y[N],s[N][N];
double check(double a,double b,double c, double d){
	double ans;
	ans=sqrt((a-c)*(a-c)+(b-d)*(b-d));
	return ans;
}
void dfs(int p){
	cout << p << " ";
	vis[p]=1;
	double _min=INF;
	int h=-1;
	for(int i=1;i<=n;i++){
		if(s[p][i]<_min&&vis[i]==0){
			_min = s[p][i];
			h = i;
		}
	} 
	if(h!=-1) dfs(h);
}
int main(){
	//freopen("tree.in","r",stdin);
	//freopen("tree.out","w",stdout);
	cin >> n;
	for(int i=1;i<=n;i++){
		cin >> x[i] >> y[i];
		if(y[i]>_max){
			_max=y[i];
			k=i;
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(i==j){
				s[i][j]=INF;
				s[j][i]=INF;
			}
			else{
				s[i][j] = check(x[i],y[i],x[j],y[j]);
				s[j][i] = s[i][j];
			}
		}
	}
	vis[k]=1;
	dfs(k);
	return 0;
}
2023/3/5 14:46
加载中...