Time Limit:2 Sec Memory Limit:64 MB
Description
某天,有人给czyuan出了个难题(这个人是不是佳姐呢~):
给你N个数(0 <= N <= 100000),再给你Q次询问(0 <= Q <= 100000),每次询问告诉你一个数K,要你判断K是否在给定的N个数中。(所有数据均为整数,且在int范围内)
给你N个数(0 <= N <= 100000),再给你Q次询问(0 <= Q <= 100000),每次询问告诉你一个数K,要你判断K是否在给定的N个数中。(所有数据均为整数,且在int范围内)
Input
多组测试数据,每组测试数据第一行为N, Q。第二行N个数,以下Q行,每行一个数K。输入数据以N = Q = 0结束。
Output
每组数据输出Q行,如果K存在N个数中,则输出YES,否则输出NO。
Sample Input
5 3 3 4 9 8 7 6 7 8 0 0
Sample Output
NO YES YES
代码:
#include <stdio.h>
#include <stdlib.h>
int sort(const void *a, const void *b)
{
return ((int *)a-(int *)b);
}
int search(int array[], int n, int num)
{
int min =0;
int max =n-1;
int mid;
while (min <= max)
{
mid=(min+max)/2;
if (array[mid]>num)
max=mid-1;
else if(array[mid]<num)
min=mid+1;
else
return 1;
}
return 0;
}
int main()
{
int n,m,k,i;
int a[100000];
while(scanf("%d %d",&n,&m),n+m)
{
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
qsort(a,n,sizeof(int),sort);
while(m--)
{
scanf("%d",&k);
printf(search(a,n,k)==0? "NO\n":"YES\n");
}
}
return 0;
}
分析:本来的想法是用for完全遍历,然后提交后果断的悲剧了!超时!才学C不久还没接触过算法,以前一直在做简单的模拟和数学题,很少遇到超时。
今天才学的二分查找和快速排序.总算给A掉了