题目大意:
二维平面内给定两个整数坐标A(x1,y1) B(x2,y2),如果能在x轴上找出一点使得三角形的面积等于2(与 2 的绝对误差不超过 0.001 即可)则输出符合题意的一个横坐标,否则输出"no answer"。
解题思路:
(x1,y1)(x2,y2)向量叉乘=x1y2 - x2y1(几何意义为平行四边形的面积)
利用向量叉乘/2可以直接求出三角形的面积,设O点坐标(x,0),OA向量 ‘叉乘 ‘ OB向量=((x1-x),y1)叉乘((x2-x),y2)=x1y2-y2x-x2y1+y1x+(y1-y2)x=4,整理可得x=(4-x1y2+x2y1)/(y1-y2)
参考代码:
#include <bits/stdc++.h>
using namespace std;
#define ll long long
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
ll x1,y1,x2,y2;
cin>>x1>>y1>>x2>>y2;
if(y1==y2){
ll l=abs(x1-x2);
if(l*abs(y1)==4){
printf("%.10f",0.0);
return 0;
}
else {
cout<<"no answer";
return 0;
}
}
else{
printf("%.10f",(4.0-x1*y2*1.0+x2*y1*1.0)/(y1-y2)*1.0);
return 0;
}
}



京公网安备 11010502036488号