#1042. A<B Problem
A<B Problem
No submission language available for this problem.
Background
Special for beginners, ^_^
Description
对计算机的算术运算有深刻的理解是写出可靠程序的关键,一些初学者往往很惊奇地了解到(用补码表示的)两个正数的和或者积可能为负。比如在大多数计算机(使用 32 位来表示数据类型 int)上计算 200∗300∗400∗500 会得出结果 −884901888
补码的算术运算满足很多整数运算的代数特性,因此,编译器可以很安全地把一个常量乘法转为一系列的移位和加法。例如利用乘法的结合律和交换律,计算一下的任意一个 C 表达式,都会得出 −884901888 的结果。
(500∗400)∗(300∗200)
((500∗400)∗300)∗200
((200∗500)∗300)∗400
400∗(200∗(300∗500))
虽然没有产生期望的结果,但是至少它是一致的!
算数溢出时造成程序错误和安全漏洞的一个常见根源。例如程序员和编译器不能用表达式 (x−y<0) 来代替 (x<y) ,因为前者可能会产生溢出。甚至也不能用表达式 (−y<−x) 来替代,因为在补码表示中负数和正数的范围是不对称的。
Format
Input
输入一行字符串长度不超过 30,一定是 (x<y) , (x−y<0) , (−y<−x) 三种形式之一,请判断给出的写法是否是安全的,如果是安全的请输出 YES,否则输出 NO
注意:在这里我们假设 x 和 y 都是正数,即不会出现 这种数。
Output
如果输入格式为 (x<y) 则输出 YES ,否则输出 NO
Samples
( 5 < 10 )
YES
( 5 - 10 < 0 )
NO
( -5 < -10 )
NO
Limitation
1s, 1024KiB for each test case.
Related
In following homework: