求助 一直11pts
查看原帖
求助 一直11pts
466451
LYY_yyyy楼主2022/10/31 08:09

Code:

#include<bits/stdc++.h>
using namespace std;
int n;
int x[1010],y[1010],w[1010];
double ans;
double xx,yy;
const double e=1e-6;
double wor(double dx,double dy)
{
	double tot=0;
	for(int i=1;i<=n;i++)
		tot+=(double)sqrt((x[i]-dx)*(x[i]-dx)+(y[i]-dy)*(y[i]-dy))*(double)w[i];
	return tot;
}
double ra(double l,double r)
{
	return (double)rand()/(double)RAND_MAX*(r-l)+l;
}
void ran()
{
	for(double T=1e4;T>=1e-4;T*=0.994)
	{
		double lx=xx-T,rx=xx+T,ly=yy-T,ry=yy+T;
		double na=ra(lx,rx),nb=ra(ly,ry);
		double delta=wor(na,nb)-ans;
		if(delta<e) xx=na,yy=nb,ans=wor(na,nb);
		else if(exp(-delta/T)>ra(0,1)) xx=na,yy=nb,ans=wor(na,nb);
	}
}
int main()
{
	srand(time(NULL));
	cin>>n;
	for(int i=1;i<=n;i++) cin>>x[i]>>y[i]>>w[i];
	xx=ra(-10000,10000),yy=ra(-10000,10000);
	ans=wor(xx,yy);
	//cout<<ra(0,1)<<endl;
	for(int i=1;i<=10;i++) ran();
	printf("%.3lf %.3lf",xx,yy);
	return 0;
}

2022/10/31 08:09
加载中...