求救
查看原帖
求救
422387
VIOLET__FOREVER楼主2022/11/24 09:48
#include<bits/stdc++.h>
using namespace std;
#define x first
#define y second
#define PII pair<double,double>

const int N=1005;

int n;
PII a[N];
int v[N];
double ansx,ansy,ans=0x3f3f3f3f;

double rand(double l,double r){
	return (double)rand()/RAND_MAX*(r-l)+l;
}
double get_dist(PII a,PII b){
	double xx=a.x-b.x;
	double yy=a.y-b.y;
	return sqrt(xx*xx+yy*yy);
}
double calc(PII w){
	double cnt=0;
	for(int i=1;i<=n;i++){
		cnt+=get_dist(w,a[i])*v[i];
	}
	if(ans>cnt){
		ansx=w.x,ansy=w.y;
		ans=cnt;
	}
	return cnt;
}
void simulate_anneal(){
	PII ver(ansx,ansy);
	for(double t=1e4;t>=1e-4;t*=0.999){
		PII s(rand(ver.x-t,ver.x+t),rand(ver.y-t,ver.y+t));
		double len=calc(s)-calc(ver);
		if(exp(-len/t)>rand(0,1)) ver=s;
	}
}
signed main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i].x>>a[i].y>>v[i];
		ansx+=a[i].x,ansy+=a[i].y;
	}
	ansx/=n,ansy/=n;
	while((double)clock()/CLOCKS_PER_SEC<0.6) simulate_anneal();
	printf("%.3lf %.3lf",ansx,ansy);
	return 0;
}
2022/11/24 09:48
加载中...