设了几个eps只有1e-6的时能过。
请问eps主要根据什么设置?
#include <bits/stdc++.h>
#define endl '\n'
using namespace std;
using ll = long long;
using db = double;
using namespace std;
db ly, ry, x[1005], y[1005], w[1005];
int n;
db dis(db a, db b, db c, db d) {
return sqrt((c - a) * (c - a) + (d - b) * (d - b));
}
db calc(db X, db Y) {
db num = 0;
for (int i = 1; i <= n; ++i) num += w[i] * dis(X, Y, x[i], y[i]);
return num;
}
db thre(db X) {
ly = -1e4, ry = 1e4;
while (ry - ly > 1e-6) { //这里
db del = (ry - ly) / 3.0;
db m1 = ly + del, m2 = ry - del;
db w1 = calc(X, m1), w2 = calc(X, m2);
if (w2 < w1)
ly = m1;
else
ry = m2;
}
return calc(X, ly);
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> x[i] >> y[i] >> w[i];
}
db lx = -1e4, rx = 1e4;
while (rx - lx > 1e-6) { //这里
db del = (rx - lx) / 3.0;
db m1 = lx + del, m2 = rx - del;
db w1 = thre(m1), w2 = thre(m2);
if (w2 < w1)
lx = m1;
else
rx = m2;
}
cout << fixed << setprecision(3) << lx << " " << ly << endl;
return 0;
}