Code:
#include <bits/stdc++.h>
using namespace std;
#define maxn 1010
#define down 0.996
int n;
double ansx=0,ansy=0,answ=0;
struct node {
int x,y,w;
}e[maxn];
inline void init_() {
freopen("phdiaod.txt","r",stdin);
}
inline int read_() {
int x=0,f=1;
char c=getchar();
while(c<'0'||c>'9') {
if(c=='-') f=-1;
c=getchar();
}
while(c>='0'&&c<='9') {
x=x*10+c-'0';
c=getchar();
}
return x*f;
}
inline void readda_() {
n=read_();
for(int i=1;i<=n;i++) {
e[i].x=read_();e[i].y=read_();e[i].w=read_();
ansx+=e[i].x;ansy+=e[i].y;
}
}
inline double energy_(double x,double y) {
double r=0,dx,dy;
for(int i=1;i<=n;i++) {
dx=x-e[i].x;
dy=y-e[i].y;
r+=sqrt(dx*dx+dy*dy) * e[i].w;
}
return r;
}
inline void SA_() {
double T=3000;
while(T>1e-15) {
double ex=ansx+(rand()*2-RAND_MAX)*T;
double ey=ansy+(rand()*2-RAND_MAX)*T;
double ew=energy_(ex,ey);
double DE=ew-answ;
if(DE<0) {
ansx=ex;
ansy=ey;
answ=ew;
}
else if(exp(-DE/T)*RAND_MAX>rand()) {
ansx=ex;
ansy=ey;
}
T*=down;
}
}
inline void work_() {
ansx/=n;ansy/=n;
answ=energy_(ansx,ansy);
SA_();
SA_();
SA_();
SA_();
printf("%.3lf %.3lf",ansx,ansy);
}
int main() {
init_();
readda_();
work_();
return 0;
}