题目链接:https://ac.nowcoder.com/acm/contest/51458/C
解决思路
我们可以,以C点的x坐标(Xc)来划分左右两段
如果符合条件出现在左边(0 -> Xc)就输出YES,
如果不存在左边那就去判断是否存在右边(Xc -> Xb)(包括中间的Xc),
如果右边符合条件就输出YES,不然就符合条件输出NO
如图(画的不好请见谅,第一次写题解)
先求出整个三角形的面积
ABC三角形的面积为 (1/2) * Xb * Yc
假设在左边 我们设X0 为 i 他的高为X,运用 相似三角形的原理
将第一个式子带入第二个式子化简后得
右边也是和左边同理
将第一个式子带入第二个式子化简后得
下面直接上代码
#include<bits/stdc++.h>
using namespace std;
int main(){
int T;
scanf("%d",&T);
while(T--){
bool flag=false;//来判断是否存在
int xb,xc,yc;
scanf("%d%d%d",&xb,&xc,&yc);
//左右的分界线为xc
//如果x0在左半
//[公式由相似三角形推出]
for(int i=0;i<xc;i++){
if(2*i*i == xc*xb){
flag=true;
break;
}
}
//如果不在左半
if(!flag){
//如果x0在右半(包括分界线)
for(int i=xc;i<=xb;i++){
if((xb-xc)*xb==2*i*i){
flag=true;
break;
}
}
}
if(flag)puts("YES");
else puts("NO");
}
return 0;
}
如果有错,请大佬在评论补充一下