5 3 3 4 9 8 7 6 7 8 0 0
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掉了