Problem Description
CA loves to play with sticks.
One day he receives four pieces of sticks, he wants to know these sticks can spell a quadrilateral.
(What is quadrilateral? Click here: https://en.wikipedia.org/wiki/Quadrilateral)
One day he receives four pieces of sticks, he wants to know these sticks can spell a quadrilateral.
(What is quadrilateral? Click here: https://en.wikipedia.org/wiki/Quadrilateral)
Input
First line contains
T
denoting the number of testcases.
T testcases follow. Each testcase contains four integers a,b,c,d in a line, denoting the length of sticks.
1≤T≤1000, 0≤a,b,c,d≤263−1
T testcases follow. Each testcase contains four integers a,b,c,d in a line, denoting the length of sticks.
1≤T≤1000, 0≤a,b,c,d≤263−1
Output
For each testcase, if these sticks can spell a quadrilateral, output "Yes"; otherwise, output "No" (without the quotation marks).
Sample Input
2 1 1 1 1 1 1 9 2
Sample Output
Yes No
solution:
给你四根棍,让你判断能否组成四边形,由于数据范围,3个数相加会超过unsigned long long 因此我们让a<=b<=c<=d a+b+c>d改成a+b>d-c即可,另外 注意长度为0的木棍输出No
#include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<map> #include<queue> #include<stack> #include<string> #include<iostream> #include<set> using namespace std; typedef long long ll; #define mem(a) (memset(a,0,sizeof(a))) #define f0(x,n) for(int x=0;x<n;x++) #define f1(x,n) for(int x=1;x<=n;x++) #define si(x) scanf("%d",&x) #define sii(x,y) scanf("%d%d",&x,&y) #define siii(x,y,z) scanf("%d%d%d",&x,&y,&z) #define sl(x) scanf("%I64d",&x) #define sll(x,y) scanf("%I64D%I64d",&x,&y) #define sd(x) scanf("%lf",&x) #define sdd(x,y) scanf("%lf%lf",&x,&y) #define mp(x,y) make_pair(x,y) #define pb(x) push_back(x) const int maxn = 1e6 + 500; const ll inf = 1e9 + 7; int n; unsigned long long num[10]; int main() { int t; si(t); while (t--) { f0(i, 4) cin >> num[i]; sort(num, num + 4); if (num[1] + num[2]<=num[3]-num[0]||num[0]==0)printf("No\n"); else printf("Yes\n"); } return 0; }