92求救

P1401 [入门赛 #18] 禁止在 int 乘 int 时不开 long long

@[yyh2024](/user/1295306) 这道题有几个细节: >1. 如果 $x_1$ 和 $y_1$ 都为负,那么就会负负**得正**. $x_2$ 和 $y_2$ 也有可能一正一负,**得负**. >2. 某些时候 $x_1$ 和 $y_2$ 或 $x_2$ 和 $y_1$ 的乘积也可能极大或极小. 比如: $x_1$ = 0 , $x_2$ =2147483647 $y_1$ = -2 , $y_2$ =1 则, $x_1×y_1$ = 0 $x_2×y_2$ = 2147483647 这时,你的代码就会输出"int". 但是, $x_2×y_1$ = -4294967294 因为 -4294967294 < -2147483647 , 所以正确的输出应该是"long long int" 综上,只需将代码中 `if` 里的判断修改为: ``` x1*y1<-2147483648||x1*y1>2147483647||x2*y2>2147483647||x2*y2<-2147483648||x1*y2<-2147483648||x2*y1<-2147483647 ``` 即可得到一个 “ _unaccepted_ ” 的 " _100分_ "(第101个样例过不了) 但是,在这个思路上修改一下判断方法: $x×y$ 为 `long long int` 类型,而 $int(x×y)$ 为 `int` 类型, 只要比较 $x×y$ 和 $int(x×y)$ 是否相等,即可知道有没有超出 `int` 值. 所以想要AC只用把 `if` 里的判断改为: ```cpp x1*y1!=int(x1*y1)||x2*y2!=int(x2*y2)||x1*y2!=int(x1*y2)||x2*y1!=int(x2*y1) `````` 即可. ### 求互关!
by penghouqiao @ 2024-07-10 22:00:16


@[penghouqiao](/user/927730) 已互关
by yyh2024 @ 2024-07-11 18:34:58


@[penghouqiao](/user/927730) Thanks you.
by yyh2024 @ 2024-07-11 18:43:44


@[yyh2024](/user/1295306) 已回关
by penghouqiao @ 2024-07-11 18:46:57


|