您的位置:首页 > 其它

HDU-5655 CA Loves Stick(Water) 判断

2016-04-04 19:16 429 查看

CA Loves Stick

Time
Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)
Total
Submission(s): 642 Accepted Submission(s): 226
Problem
HDU-5655 CA Loves Stick

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)
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

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

题解:题目意思很简单,判断a、b、c、d四边能否组成四边形,即任意三边>另一边(排除掉为0情况)a
+ b + c > d
很简单范围
[ 0 , 2^63 ),就算在定义long long 的情况下,a+b就爆了,所以相加肯定不对,函数式转换d -
b - c >= a
核心代码:
if((a[1]-a[0]-a[2]>=a[3])
|| (a[2]-a[0]-a[1]>=a[3])
|| (a[3]-a[0]-a[1]>=a[2])
|| (a[0]-a[1]-a[2]>=a[3]))
cout<<"No"<<endl;//已排除了为0情况

可恨的是WA了,不是思路错误,而且相减的数若为负数
可能溢出!!!

long long的最大值:9223372036854775807

long long的最小值:-9223372036854775808

2^63=9223372036854775808
测试数据:1
9223372036854775807 9223372036854775807 1(Yes)
所以需要sort排序,找出最大的数再减掉其他三个数!
具体代码如下:
#include"iostream"
#include"algorithm"
using namespace std;
int main(){
int t,i;
long long a[10];
cin>>t;
while(t--){
for(i=0; i<4; i++){
cin>>a[i];
}
sort(a,a+4);
if(!a[0]||!a[1]||!a[2]||!a[3])	{
cout<<"No"<<endl;
continue;
}

if(a[3]-a[0]-a[1]>=a[2])
cout<<"No"<<endl;
else
cout<<"Yes"<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: