找球号(一)

题目链接:http://115.159.40.116/contest_show.php?cid=133#problem/G

G. 找球号(一)

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

Input

第一行有两个整数m,n(0<=n<=100000,0<=m<=1000000);m表示这堆球里有m个球,n表示这个游戏进行n次。
接下来输入m+n个整数,前m个分别表示这m个球的编号i,后n个分别表示每次游戏中的随机整数k

Output

输出"YES"或"NO"

Sample Input

6 4
23 34 46 768 343 343
2 4 23 343

Sample Output

NO
NO
YES
YES
set容器做的代码:
#include<stdio.h>
#include<set>
#include<algorithm>
using namespace std;
int main()
{
    set<int> se;//构建一个名为se的容器
    int m,n,a,b;
    scanf("%d%d",&m,&n);
    for(int i=0;i<m;i++)
    {
        scanf("%d",&a);
        se.insert(a);//将a插入se;
    }
    while(n--)
    {
        scanf("%d",&b);
        if(se.find(b)!=se.end())//如果容器内含有b元素;
            printf("YES\n");
        else
            printf("NO\n");
    }
    return 0;
}
#include<stdio.h>
#include<set>
#include<algorithm>
using namespace std;
int m,n,a[1000001]={0},b;
int main()
{
    scanf("%d%d",&m,&n);
    for(int i=0;i<m;i++)
        scanf("%d",&a[i]);
    set<int> se(a,a+m);//将数组a放到容器里;
    while(n--)
    {
        scanf("%d",&b);
        if(se.find(b)!=se.end())//如果容器se里有b元素;
            printf("YES\n");
        else
            printf("NO\n");
    }
    return 0;
}

二分法的代码:
#include<stdio.h>
#include<algorithm>
using namespace std;
int n,m,a[1000001]= {0},b;
int fin(int b)//二分法;
{
    int l=0,r=m-1,mi;
    while(l<=r)
    {
        mi=(l+r)/2;
        if(a[mi]==b)
            return 1;
        else if(a[mi]<b)
            l=mi+1;
        else
            r=mi-1;
    }
    return 0;
}
int main()
{
    scanf("%d%d",&m,&n);
    for(int i=0; i<m; i++)
        scanf("%d",&a[i]);
    sort(a,a+m);//虽然排序有点短,但是不能忘;
    for(int j=0; j<n; j++)
    {
        scanf("%d",&b);
        if(fin(b)==1)
            printf("YES\n");
        else
            printf("NO\n");
    }
    return 0;
}




描述

背包,二分,栈,队列,HDU有两道B,C,应该不能交。百度搜索HDU,题号为2602,2546.在航电提交

VJudge Status

By checking remote status page every 10 minutes.
OJ Status
HDU

管理员 QQ 1532958223


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值