现在的位置: 首页 > 综合 > 正文

1265 卡片之和

2012年08月07日 ⁄ 综合 ⁄ 共 844字 ⁄ 字号 评论关闭
 
描述

在看了盗一的表演后,聪明的快斗很快就明白了这个魔术背后的秘密。接着就想出了一个类似的魔术。他让老爸从那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");



		}
		
		
		
	}
}

 

抱歉!评论已关闭.