P10245 Swimming Pool 题解

· · 题解

题意分析

这道题很数学,就是给你四条边,问你能不能组成一个梯形。

答题思路

能否组成一个梯形主要用了几个性质,主要是由三角形三边关系和两点间距离公式来推的,有兴趣可以自己推导一下,在这里就不废话了。

(还是废话一下,我们这里分成两种情况来讨论,第一种是 ac 边为短边,bd 边是长边,第二种是反过来,我们平移梯形的腰就可以得到下面代码中的式子,百度上会有详细的推导,这里只是简要说明)

梯形有且只有一组对边平行且不相等,我们可以沿平行的对边平移一个腰与另一腰有交点,这时形成一个三角形,底边为原梯形下底 - 上底的差,另两边为两腰长由三角形两边之和大于第三边,两边之差小于第三边得两腰和 > 两底差,两腰差。

Code

#include<bits/stdc++.h>
using namespace std;
int tot;
int main(){
    int t;
    cin>>t;
    for(int tt=1;tt<=t;tt++){
        int p,q,r,s;
        cin>>p>>q>>r>>s;
        if((p!=r && (q+s)>abs(p-r) && abs(q-s)<abs(r-p))||(q!=s && (p+r)>abs(q-s) && abs(r-p)<abs(q-s))){
            cout<<"yes"<<endl;
        }
        else{
            cout<<"no"<<endl;
        }
    }
    return 0;
}