在看了盗一的表演后,聪明的快斗很快就明白了这个魔术背后的秘密。接着就想出了一个类似的魔术。他让老爸从那10000张卡片中抽出n张,然后盗一随便说出m个数,快斗能很快的判断出这个数是否是那n张卡片中某两个数的和。
当然,俗话说有其父必有其子,快斗同样是一个出色的软件工程师。
- 输入
-
第一行一个整数表示数据的组数(多组数据),对于每组数据第一行有两个整数 n (1 ≤ n ≤ 10000) , m (1 ≤ m ≤ 100) 。第二行是n 个互异的整数构成的集合S。第三行有 m 个待验证的整数。
- 输出
-
对于每个待验证的整数输出一行,如果集合S中存在两个整数之和为待验证的整数,输出“Yes”,否则输出“No”。
- 样例输入
-
1 10 5 3 1 8 4 7 9 5 10 2 6 27 7 26 10 11
- 样例输出
-
No Yes No Yes Yes
用一个数组建立索引,出现的数在数组中为1,这样直接通过下标来进行判断,在查找过程中,由于要看是否是由两个数构成的,判断数组内容是否为1即可
#include <stdio.h> main() { int number,te; int i,j,k,m; int number1,number2; int a[10000]; int result[100000]; int b; int flag; scanf("%d",&number); for(te=1;te<=number;te++) { for(k=0;k<100000;k++) result[k]=0; scanf("%d %d",&number1,&number2); for(i=1;i<=number1;i++) { scanf("%d",&a[i]); result[a[i]]=1; } for(i=1;i<=number2;i++) { flag=0; scanf("%d",&b); for(j=1;j<=number1/2;j++) { if(result[b-a[j]]==1) flag=1; else continue; } if(flag==1) printf("Yes\n"); else printf("No\n"); } } }