链接:https://ac.nowcoder.com/acm/contest/120563/H 来源:牛客网

题目描述

小红在二维平面地图上标记了两个关键点 𝐴 ( 𝑥 𝑎 , 𝑦 𝑎 ) 和 𝐵 ( 𝑥 𝑏 , 𝑦 𝑏 )。 她现在需要在 x 轴上寻找一个锚点 O(x,0),使得以 A,B,O 为顶点的三角形面积恰好等于 2。 请你帮小红判断是否存在符合条件的锚点横坐标 x。如果存在,请找出一个符合条件的 x。

输入描述:

第一行输入两个整数 𝑥 𝑎 , 𝑦 𝑎 ( − 1 0^ 4 ≦ 𝑥 𝑎 , 𝑦 𝑎 ≦ 1 0^ 4 ) ,代表点 A 的坐标。 第二行输入两个整数 𝑥 𝑏 , 𝑦 𝑏 ( − 1 0^ 4 ≦ 𝑥 𝑏 , 𝑦 𝑏 ≦ 1 0^ 4 ) ,代表点 B 的坐标。

输出描述:

如果存在满足条件的 x,输出一个实数表示该坐标(你只需要保证最终构造的三角形面积与 2 的绝对误差不超过 0.001 即可);否则,输出

no answer。

如果存在多个解决方案,您可以输出任意一个,系统会自动判定是否正确。注意,自测运行功能可能因此返回错误结果,请自行检查答案正确性。 题解: 使用交叉乘算出x轴上符合条件的点即可,需注意当A,B点y轴坐标一致时的特殊情况,最后输出时注意精度即可。 代码如下:

void solve()
{
	ll a,b,c,d;
	cin>>a>>b>>c>>d;
	if(b==d)
    {
        if(abs(a-c)*(abs(b))/2!=2)
        cout<<"no answer"<<endl;
        else cout<<0<<endl;
    }
	else{
        double e=1.0*(4-a*d+b*c)/(b-d);
		printf("%.30lf\n",e);
	}
}

如有错误烦请指正谢谢