加载中...

Codeforces1656B题 Subtract Operation

Codeforces1656B题 Subtract Operation

题目

Subtract Operation
time limit per test:1 second
memory limit per test:256 megabytes
input:standard input
output:standard output

You are given a list of n integers. You can perform the following operation: you choose an element x from the list, erase x from the list, and subtract the value of x from all the remaining elements. Thus, in one operation, the length of the list is decreased by exactly 1.

Given an integer k (k>0), find if there is some sequence of n−1 operations such that, after applying the operations, the only remaining element of the list is equal to k.

Input

The input consists of multiple test cases. The first line contains a single integer t (1≤t≤10^4) — the number of test cases. Description of the test cases follows.

The first line of each test case contains two integers nn and kk (2≤n≤2⋅10^5, 1≤k≤10^9), the number of integers in the list, and the target value, respectively.

The second line of each test case contains the n integers of the list a1,a2,…,an(−10^9 ≤ai≤10^9).

It is guaranteed that the sum of n over all test cases is not greater that 2⋅10^5.

Output

For each test case, print YES if you can achieve k with a sequence of n−1 operations. Otherwise, print NO.

You may print each letter in any case (for example, "YES", "Yes", "yes", "yEs" will all be recognized as a positive answer).

Example

input

Copy

4
4 5
4 2 2 7
5 4
1 9 1 3 4
2 17
17 0
2 17
18 18

output

Copy

YES
NO
YES
NO

Note

In the first example we have the list {4,2,2,7}, and we have the target k=5. One way to achieve it is the following: first we choose the third element, obtaining the list {2,0,5}. Next we choose the first element, obtaining the list {−2,3}. Finally, we choose the first element, obtaining the list {5}.

思路

如果数组中恰好有两个数的差等于k,那么这两个数同时减去任意数,他们之间的差不会变,恒为k

代码

#include<iostream>
#include<map>

using namespace std;

int n,t,k,a[200005];

int main()
{
    cin>>t;
    while(t--)
    {
        cin>>n>>k;
        bool flag=false;
        map<int,bool> mp;
        for(int i=1;i<=n;i++)
        {
        	cin>>a[i];
			mp[a[i]]=true;
		}
        for(int i=1;i<=n;i++)
			if(mp[a[i]+k])
			{
				flag=true;
				break;
			}
        if(flag) puts("YES");
        else puts("NO");
    }
    return 0;
}
posted @ 2022-03-25 18:39  我没有bug  阅读(88)  评论(0编辑  收藏  举报