数据结构_find_lucky_number(寻找幸运值)

数据结构_find_lucky_number(寻找幸运值)

 

问题描述

  给出两个已按升序排列的数组 a[1..n],b[1..m],如果存在 i,j,使得
a[i]+b[j]==k,我们便说已找到幸运值。请你判断能不能找到幸运值。


★数据输入

  输入第一行为正整数 n, m, k。 (1<=k<=10^9)
  第二行为 n 个正整数 a[1..n]。 (1<=ai<=10^9)
  第三行为 m 个正整数 b[1..m]。 (1<=bi<=10^9)
  80%的数据 1<=n,m<=1000.
  100%的数据 1<=n,m<=100000.


★数据输出
  如果能找到幸运值,输出 yes。否则输出 no

输入示例 输出示例
3 3 8
1 2 3
4 6 7
yes


输入示例 输出示例
3 3 4
1 2 3
4 6 7
no



解题思路

  二分查找  找指定值

 

code

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 int pm[100002]={0};
 5 int pn[100002]={0};
 6 
 7 bool BinarySearch(int *p, int l, int r, int num)
 8 {
 9     bool flag = false;
10     while(l<=r)
11     {
12         int m = (l+r)/2;
13         if(p[m]==num)
14         {
15             flag = true;
16             break;
17         }
18         else if(p[m]<num)
19             l = m+1;
20         else
21             r = m-1;
22     }
23     return flag;
24 }
25 
26 int main()
27 {
28     int n,m,k,i;
29     scanf("%d %d %d",&n,&m,&k);
30 //    int *pn = (int *)malloc(sizeof(int)*n);
31 //    int *pm = (int *)malloc(sizeof(int)*m);
32     for(i=0;i<n;i++)
33         scanf("%d",pn+i);
34     for(i=0;i<m;i++)
35         scanf("%d",pm+i);
36 
37     bool flag = false;
38     for(i=0;i<n;i++)
39     {
40         if(BinarySearch(pm,0,m-1,k-pn[i]))
41         {
42             flag = true;
43             break;
44         }
45     }
46 
47     if(flag)
48         printf("yes\n");
49     else
50         printf("no\n");    
51     
52     
53 //    free(pn);
54 //    free(pm);
55     return 0;
56 }

 

posted @ 2017-09-22 22:20  cbattle  阅读(397)  评论(0编辑  收藏  举报