求条

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

@[kuikuidadi](/user/738213) 共有 $4$ 种情况,需要枚举。再然后 `int` 下限是 $-2147483648$。 或者你也可以用 $int$ 溢出的性质做。 求一关
by XLoffy @ 2024-08-24 10:04:59


@[kuikuidadi](/user/738213) ```cpp #include<bits/stdc++.h> using namespace std; long long a,b,c,d; int main(){ cin>>a>>b>>c>>d; long long x=a*c,y=b*d; long long e = a * d, f = b * c;// if(y>2147483647||y<INT_MIN){ cout<<"long long int"; }else if(x>2147483647||x<INT_MIN){ cout<<"long long int"; }else if(e>2147483647||e<INT_MIN){// cout<<"long long int";// }else if(f>2147483647||f<INT_MIN){// cout<<"long long int";// }else cout<<"int"; return 0; } ``` 刚刚改了一下,写 $−2147483648$ 有未知原因报错就写`INT_MAX`了,能AC。
by js2024 @ 2024-08-24 10:11:16


@[kuikuidadi](/user/738213) 提供一组hack ``` -1000000000 0 1 3 ```
by 210101zhaosicheng @ 2024-08-24 10:17:18


判断少了。 ```cpp #include<iostream> using namespace std; long long amin,amax,bmin,bmax; int main(){ cin>>amin>>amax>>bmin>>bmax; if(amin*bmin<-2147483648||amax*bmax>2147483647||amin*bmin>2147483647||amax*bmax<-2147483648||amin*bmax<-2147483648||amin*bmin>2147483647||amax*bmin<-2147483648||amax*bmin>2147483647){ cout<<"long long int"; }else{ cout<<"int"; } return 0; } ```
by wennuan2861 @ 2024-08-24 19:17:24


|