码迷,mamicode.com
首页 > 其他好文 > 详细

找球号(一)

时间:2016-05-11 21:59:07      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:

描述

  在某一国度里流行着一种游戏。游戏规则为:在一堆球中,每个球上都有一个整数编号i(0<=i<=100000000),编号可重复,现在说一个随机整数k(0<=k<=100000100),判断编号为k的球是否在这堆球中(存在为"YES",否则为"NO"),先答出者为胜。现在有一个人想玩玩这个游戏,但他又很懒。他希望你能帮助他取得胜利。 

输入
  第一行有两个整数m,n(0<=n<=100000,0<=m<=1000000);m表示这堆球里有m个球,n表示这个游戏进行n次。
  接下来输入m+n个整数,前m个分别表示这m个球的编号i,后n个分别表示每次游戏中的随机整数k
输出
  输出"YES"或"NO"
样例输入
6 4
23 34 46 768 343 343
2 4 23 343

样例输出

NO
NO
YES
YES

测试代码

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 #define M 1000010
 5 
 6 using namespace std;
 7 
 8 int a[M];
 9 
10 bool find(int key, int s, int e)
11 {
12     int m;
13     if (key<a[s] || key>a[e])
14     {
15         return false;
16     }
17     while (s <= e)
18     {    
19         m = (s + e) / 2;
20         if (key == a[m])
21         {
22             return true;
23         }
24         else if (key < a[m])
25         {
26             e = m - 1;
27         }
28         else
29         {
30             s = m + 1;
31         }
32     }
33     return false;
34 }
35 
36 int main()
37 {
38     int n, m, i, t;
39     scanf("%d%d", &m, &n);
40 
41     for (i = 0; i < m; i++)
42     {
43         scanf("%d", &a[i]);
44     }
45     sort(a, a + m);
46     for (i = 0; i<n; i++)
47     {
48         scanf("%d", &t);
49         if (find(t, 0, m - 1))
50         {
51             printf("YES\n");
52         }
53         else
54         {
55             printf("NO\n");
56         }
57     }
58 
59     return 0;
60 }

 

找球号(一)

标签:

原文地址:http://www.cnblogs.com/maxin/p/5483509.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!