题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=5656

CA Loves Stick

Accepts: 381   Submissions: 3204

Time Limit: 2000/1000 MS (Java/Others)     Memory Limit: 262144/262144 K (Java/Others)

问题描述

CA喜欢玩木棍。

有一天他获得了四根木棍,他想知道用这些木棍能不能拼成一个四边形。(四边形定义:https://en.wikipedia.org/wiki/Quadrilateral)

输入描述

第一行TT,表示有TT组数据。

接下来TT组数据,每组数据包含四个整数a,b,c,da,b,c,d,分别为四根木棍的长度。

1 \le T \le 1000,~0 \le a,b,c,d \le 2^{63}-11≤T≤1000, 0≤a,b,c,d≤2​63​​−1

输出描述

对于每个数据,如果能拼成一个四边形,输出“Yes”;否则输出“No”(不包括双引号)。

输入样例

2

1 1 1 1

1 1 9 2

输出样例

Yes

No

题解:

-2^63:  xb1000...0(63个0) ,即 -0;(LL)1<<63

   0:  xb0000...0(64个0),即+0;

  最小三边和大于最大边即可构成4边形

  但数据很多会爆,所以要做些处理

代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std; typedef long long LL;
const LL t_63 = ((LL) << );
LL a[]; int main() {
int tc;
scanf("%d", &tc);
LL x = ;
while (tc--) {
for (int i = ; i < ; i++) scanf("%lld", a + i);
sort(a, a + );
if (a[]> && a[] - t_63 + a[]>a[] - a[] - t_63) {
printf("Yes\n");
}
else printf("No\n");
}
return ;
}
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std; typedef long long LL;
LL a[]; int main() {
int tc;
scanf("%d", &tc);
while (tc--) {
for (int i = ; i < ; i++) scanf("%lld", a + i);
sort(a, a + );
if (a[]>&&a[]>a[] - a[]-a[]) {
printf("Yes\n");
}
else printf("No\n");
}
return ;
}
05-14 06:04