P8550 冬之花 题解

· · 题解

前言

月赛 2A, 奇特分类讨论。

正文

首先发现如果有两个不一样的数,答案必为 Yes.

证明:若 x + y = 0y \ne z, 则 x + z \ne 0. 也就是 x 可以不为 0.

其他情况可以划归。

那么继续考虑剩下的问题。发现数字同号时答案也为 Yes, 因为无论怎么加符号都不变, |x| 此时可以随意变大,而 x 永远不会变成 0.

然后还有一种就是两数同号但是 a 整除不了 x, 此时也是 Yes, 因为你再怎么加也加不出。

于是剩下来的情况都是 No, 那么这道题就解决啦。

对赛时的大部分代码的 Hack:

Input:

1
2 6
-2 -3

Output:

Yes

代码

#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define rint register int

int T;

signed main()
{
    cin >> T;
    for(int i = 1; i <= T; ++ i)
    {
        int N, X, t;
        bool neq = false;
        cin >> N >> X;
        for(int j = 1; j <= N; ++ j)
        {
            int tmp;
            cin >> tmp;
            if(j == 1) t = tmp;
            if(j != 1 && tmp != t) neq = true;           
        }

        if(neq) puts("Yes");
        else if(t > 0 && X > 0) puts("Yes");
        else if(t < 0 && X < 0) puts("Yes");
        else if(X % t != 0) puts("Yes");
        else puts("No");
    }

    return 0;
}

后言

感谢出题人。