题解:给你一个长度为n的数组 一个数字k 每次可以选择删除数组中其中一个元素 其他剩下的所有元素的值都要减去被删掉的这个元素 问最后剩下的那个元素能不能等于k
每个元素减去的都是相同的值 所以二者之间的差值恒定不变,我们只需要找是否存在两个元素的差值为k即可 不能双层for,会超时,可以用set容器,一层for去找是不是存在
inpu
4
4 5
4 2 2 7
5 4
1 9 1 3 4
2 17
17 0
2 17
18 18
output
YES
NO
YES
NO
#include<bits/stdc++.h>
using namespace std;
set<int>s;
int a[2100000];
int main()
{
int i,j,k,m,n,t;
scanf("%d",&t);
while(t--)
{
s.clear();
scanf("%d%d",&n,&k);
for(i=1; i<=n; i++)
{
scanf("%d",&a[i]);
s.insert(a[i]);
}
int flag=0;
for(i=1; i<=n; i++)
{
set<int>::iterator w=s.find(a[i]+k);迭代器
set<int>::iterator q=s.find(a[i]-k);
if(w!=s.end()||q!=s.end())
{
printf("YES\n");
flag=1;
break;
}
}
if(!flag)
printf("NO\n");
}
}