rt 可能是CSP考前学的最后一个算法了
#include <bits/stdc++.h>
using namespace std;
const double down=0.96;
struct node{
int x,y,v;
}w[1005];
int n;
double sx,sy,sv;
double get_energy(double x,double y){
double r=0,ax,ay;
for(int i=1;i<=n;i++){
ax=x-w[i].x;
ay=x-w[i].y;
r+=sqrt(ax*ax+ay*ay)*w[i].v;
}
return r;
}
void mnth(){
double temp=3000;
while(temp>1e-15){
double ax=sx+(rand()*2-RAND_MAX)*temp;
double ay=sy+(rand()*2-RAND_MAX)*temp;
double av=get_energy(ax,ay);
double c=av-sv;
if(c<0){
sx=ax;
sy=ay;
sv=av;
}
else if(exp(-c/temp)*RAND_MAX>rand()){
sx=ax;
sy=ay;
}
temp*=down;
}
}
int main(){
srand((int)time(0));
cin >>n;
for(int i=1;i<=n;i++){
cin >>w[i].x>>w[i].y>>w[i].v;
sx+=w[i].x;
sy+=w[i].y;
}
sx/=n;
sy/=n;
sv=get_energy(sx,sy);
mnth();
mnth();
mnth();
mnth();
mnth();
printf("%.3lf %.3lf",sx,sy);
return 0;
}
样例不过求助