首先!:alt

向量OA=(ax-x,ay),向量OB=(bx-x,by),面积为|(ax-x)by-(bx-x)ay|/2=|guding-kx|/2; 由于题目要求面积为2,我们反向求x,x有两种答案,随意输出一种即可。

考虑特殊情况,由于是浮点数,有误差,我们一定要选择范围,当k几乎接近0时,如果guding几乎接近4,即面积基本符合要求,我们随便输出一个x都行,这里输出8888888888888888888888888.0,否则无答案。

输出记得保留小数,干脆就用printf,我这里使用cout<<fixed<<setprecision(10).

#include<bits/stdc++.h>
using namespace std;
 const double eps=1e-9;
int main() {
    double ax, ay, bx, by;
    cin>>ax>>ay;
    cin>>bx>>by;
    double guding=ax*by-bx*ay;
    double k=ay-by;
    if (fabs(k)<eps) {
        if (fabs(fabs(guding)-4.0)<eps) {
            cout<<fixed<<setprecision(10)<<8888888888888888888888888.0;
        } else {
            cout<<"no answer";
        }
        return 0;
    }
    double x1=(4.0-guding)/k;
    double x2=(-4.0-guding)/k;
    printf("%10.10f",x1);
  //  cout<<fixed<<setprecision(10)<<x1;
    
    return 0;
}