網(wǎng)站建設(shè)中的主要功能西安seo培訓(xùn)學(xué)校
📚Description:
數(shù)列S中有n個(gè)整數(shù),判斷S中是否存在兩個(gè)數(shù)A、B,使之和等于X。
?Input:
第一行為T(mén),輸入包括T組測(cè)試數(shù)據(jù)。
每組數(shù)據(jù)第一行包括兩個(gè)數(shù)字n和X,第二行有n個(gè)整數(shù),表示數(shù)列S,(1<n<=100000)
🔑Output:
對(duì)于每組測(cè)試數(shù)據(jù),輸出占一行,如果存在,輸出"YES",否則輸出"NO"。
👨?🏫 Sample Input:
2
5 3
1 3 4 3 5
5 5
1 2 4 3 5
💡Sample Output:
NO
YES
🙋?思路
這題如果無(wú)腦for的話我覺(jué)得可能會(huì)超時(shí)
所以換一個(gè)思路
就是提前設(shè)置一個(gè)數(shù)組b
用來(lái)存放輸入數(shù)字A與目標(biāo)數(shù)字X的差
即X-A的值
這里我們提前把數(shù)組b的值設(shè)為0
這樣當(dāng)我們每次輸入一個(gè)A時(shí)
我們只要判斷他的差b[X-A]的值是否存在
這樣就可以邊數(shù)入邊判斷
會(huì)顯得很簡(jiǎn)潔
AC Code
#include <stdio.h>int a[1000000];
int b[1000000]; //用于標(biāo)記是否存在這個(gè)數(shù)
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"); }
}