超级管理员

79361

帖子

13

回复

238

积分

楼主
发表于 2020-10-01 08:20:03 | 查看: 34 | 回复: 0

原题链接

题意简介:

已知分别处在 \((-\infty,-1]\) H、\((-1,0)\)\((0,1)\)\([1,\infty)\) 的实数的数量(下记为集合 \(A,B,C,D\) ),试问:把这些数乘起来后,答案的可能出现在那个范围中?

题解:

首先,我们不难发现,如果负数的个数为奇数,那么答案必然在 \(A\)\(B\) 中,否则,将出现在 \(C\)\(D\) 中。

确定了这一点后,我们将符号全部视为正,试着探索答案能否出现在 \(C\)\(D\) 中。

显然,由于我们可以给这些数随便赋一个范围内的值,那么我们只需要考虑极端情况即可。

只要原本有一个数绝对值在 \(D\) 里,只要把这个数取到无限大,其它在 \(C\) 中的取无限接近于 \(1\) ,最终答案就会在 \(D\) 里。

同理,只要原本有一个数绝对值在 \(C\) 里,只要把这个数取到无限趋近于 \(0\) ,其它在 \(D\) 中的取 \(1\) ,最终答案就会在 \(C\) 里。

签到题之一。

#include <cstdio>
int t,A,B,C,D;
inline void out(bool x){
    printf(x?"Ya ":"Tidak ");
}
int main(){
    scanf("%d",&t);
    while(t--){
        scanf("%d%d%d%d",&A,&B,&C,&D);
        if((A+B)&1){
            if(D||A) A=1,D=0;
            if(B||C) B=1,C=0;
        }else{
            if(D||A) A=0,D=1;
            if(B||C) B=0,C=1;
        }
        out(A); out(B); out(C); out(D);
        putchar('\n');
    }
    return 0;
}

本帖子中包含资源

您需要 登录 才可以下载,没有帐号?立即注册

您需要登录后才可以回帖 登录 | 立即注册

2018-2020 ©v2.1 冀ICP备19027484号-2

点击这里给我发消息