solution
存在最优解,模拟退火
a x 2 + b y 2 + c z 2 + d y z + e x z + f x y = 1 ax^2+by^2+cz^2+dyz+exz+fxy=1 ax2+by2+cz2+dyz+exz+fxy=1
c z 2 + ( e x + d y ) z + ( a x 2 + b y 2 + f x y − 1 ) = 0 cz^2+(ex+dy)z+(ax^2+by^2+fxy-1)=0 cz2+(ex+dy)z+(ax2+by2+fxy−1)=0
A = c A=c A=c
B = e x + d y B=ex+dy B=ex+dy
C = a x 2 + b y 2 + f x y − 1 C=ax^2+by^2+fxy-1 C=ax2+by2+fxy−1
Δ = B 2 − 4 A C \Delta=B^2-4AC Δ=B2−4AC
z = − b + Δ 2 A , − b − Δ 2 A z=\frac{-b+\sqrt{\Delta}}{2A},\frac{-b-\sqrt{\Delta}}{2A} z=2A−b+Δ,2A−b−Δ
d i s = x ∗ x + y ∗ y + m i n ( z 1 ∗ z 1 , z 2 ∗ z 2 ) dis=x * x + y * y + min(z_1*z_1,z_2*z_2) dis=x∗x+y∗y+min(z1∗z1,z2∗z2)
code
/*Siberian Squirrel*/
/*Cute JinFish*/
#include<bits/stdc++.h>
#define IO ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#define ACM_LOCAL
using namespace std;
typedef long long ll;
const double PI = acos(-1);
const double eps = 1e-8;
/*const int MOD = 998244353, r = 119, k = 23, g = 3;
const int MOD = 1004535809, r = 479, k = 21, g = 3;*/
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
const int M = 1e7 + 10;
const int N = 4e5 + 10;
int fx[5] = {
0, 0, 1, -1};
int fy[5] = {
1, -1, 0, 0};
int dcmp(double x) {
if(fabs(x) < eps) return 0;
else return x < 0? -1: 1;
}
//inline int rnd(){static int seed=2333;return seed=(((seed*666666ll+20050818)%998244353)^1000000007)%1004535809;}
double a, b, c, d, e, f;
double func(double x, double y) {
double A = c, B = e * x + d * y, C = a * x * x + b * y * y + f * x * y - 1;
double dleta = B * B - 4 * A * C;
if(dleta < 0) return INF;
double z1 = (-B + sqrt(dleta)) / (2 * A);
double z2 = (-B - sqrt(dleta)) / (2 * A);
return sqrt(x * x + y * y + min(z1 * z1, z2 * z2));
}
inline void solve(double res = 0, bool flag = false) {
double x = sqrt(1.0 / a), y = 0;
double t = 1.0, xx, yy;
while(t > eps) {
res = func(x, y);
flag = false;
for(int i = 0; i < 4; ++ i) {
xx = x + t * fx[i];
yy = y + t * fy[i];
if(func(xx, yy) + eps < res) {
flag = true;
break;
}
}
if(flag) x = xx, y = yy;
else t *= 0.618;
}
res = func(x, y);
cout << fixed << setprecision(10) << res << endl;
}
int main() {
IO;
#ifdef ACM_LOCAL
freopen("input", "r", stdin);
freopen("output", "w", stdout);
#endif
int o = 1;
// cin >> o;
while(o --) {
while(cin >> a >> b >> c >> d >> e >> f)
solve();
}
return 0;
}