网站建设中的主要功能中国没有限制的搜索引擎
📚Description:
数列S中有n个整数,判断S中是否存在两个数A、B,使之和等于X。
⏳Input:
第一行为T,输入包括T组测试数据。
每组数据第一行包括两个数字n和X,第二行有n个整数,表示数列S,(1<n<=100000)
🔑Output:
对于每组测试数据,输出占一行,如果存在,输出"YES",否则输出"NO"。
👨🏫 Sample Input:
2
5 3
1 3 4 3 5
5 5
1 2 4 3 5
💡Sample Output:
NO
YES
🙋思路
这题如果无脑for的话我觉得可能会超时
所以换一个思路
就是提前设置一个数组b
用来存放输入数字A与目标数字X的差
即X-A的值
这里我们提前把数组b的值设为0
这样当我们每次输入一个A时
我们只要判断他的差b[X-A]的值是否存在
这样就可以边数入边判断
会显得很简洁
AC Code
#include <stdio.h>int a[1000000];
int b[1000000]; //用于标记是否存在这个数
int main(){int t;scanf("%d",&t);int n,x;while(t--){int flag=0;scanf("%d%d",&n,&x);for(int i=0;i<1000000;i++)b[i] = 0;for(int i=0;i<n;i++){scanf("%d",&a[i]);if(a[i]<=x && b[x-a[i]]!=0)flag = 1;b[a[i]]++;}if(flag == 1)printf("YES\n");elseprintf("NO\n"); }
}