【题解】P10245 Swimming Pool

P10245 Swimming Pool

题意

给你四条边 \(abcd\),求这四条边是否可以组成梯形。

思路

这显然是一道简单的普通数学题。

判断是否能构成梯形只需看四条边是否能满足,上底减下底的绝对值小于两腰之和且大于两腰之差。

证明过程

如图,\(AB=a\)\(BC=b\)\(CD=c\)\(AD=d\)

过点 \(D\)\(AB\) 的平行线交 \(BC\) 于点 \(E\)

若四边形 \(ABCD\) 为梯形,则 \(AD\) 平行于 \(BE\)

\(AB\) 平行 \(DE\)

所以四边形 \(ABED\) 是平行四边形,

\(BE=AD=d\)

因为 \(BC=b\)

所以 \(EC=BC-BE=b-d\)

由上文知四边形 \(ABED\) 是平行四边形,

\(DE=AB=a\)

于是在三角形 \(CDE\) 中。

根据三角形的三边关系可知:

\(CE<DE+DC\) 并且 \(CE>DC-DE\)

\(b-a>c-d\) 并且 \(b-a<c+d\)

注意事项

  • 因为题目中有表明,所以只有 \(ac\)\(bd\) 是对边。
  • 因为 \(a-b\) 有几率出现负数,所以用绝对值函数 abs 来做。

代码

#include <bits/stdc++.h>
using namespace std;
inline int rd(){
	int f=1,s=0;char c=getchar();
	while(c<'0'||c>'9'){if(c=='-') f=-1;c=getchar();}
	while(c>='0'&&c<='9'){s=s*10+c-'0';c=getchar();}
	return f*s;
}
inline void print(int x){
	if(x<0){putchar('-');print(-x);return;}
	if(x>9) print(x/10);
	putchar(x%10+'0');
}
int t,a,b,c,d;
int main(){    
    t=rd();
    while(t--){
    	a=rd();b=rd();c=rd();d=rd();
    	bool f=0,k=0;
			if(a!=c&&b+d>abs(a-c)&&abs(b-d)<abs(a-c))f=1; 
			else if(b!=d&&a+c>abs(b-d)&&abs(a-c)<abs(b-d))f=1;
		if(f==1)cout<<"yes\n";
		else cout<<"no\n";
	}
    return 0; 
}
```P10245 Swimming Pool题解
posted @ 2024-04-06 17:56  Kcjhfqr  阅读(45)  评论(0)    收藏  举报
.poem-wrap { position: relative; width: 1000px; max-width: 80%; border: 2px solid #797979; border-top: none; text-align: center; margin: 40px auto; } .poem-left { left: 0; } .poem-right { right: 0; } .poem-border { position: absolute; height: 2px; width: 27%; background-color: #797979; } .poem-wrap p { width: 70%; margin: auto; line-height: 30px; color: #797979; } .poem-wrap h1 { position: relative; margin-top: -20px; display: inline-block; letter-spacing: 4px; color: #797979; font-size: 2em; margin-bottom: 20px; } #poem_sentence { font-size: 25px; } #poem_info { font-size: 15px; margin: 15px auto; }