您的位置:首页 > 其它

NYOJ 86 找球号

2014-11-11 15:53 330 查看
描述
在某一国度里流行着一种游戏。游戏规则为:在一堆球中,每个球上都有一个整数编号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


直接快排查找超时。快排加二分法查找

01.
#include
<stdio.h>


02.
#include
<stdlib.h>


03.
int
 
cmp
(
void
 
const
 
*a,
void
 
const
 
*b)


04.
{


05.
return
 
*(
int
 
*)a-*(
int
 
*)b;


06.
}


07.
int
 
s[1000010];


08.
int
 
main
()


09.
{


10.
int
 
m,n,i,j,x;


11.
scanf
(
"%d%d"
,&m,&n);


12.
for
(i=0;i<m;i++)


13.
scanf
(
"%d"
,&s[i]);


14.
qsort
(s,m,
sizeof
(s[0]),cmp);


15.
for
(i=0;i<n;i++)


16.
{


17.
int
 
frist=0,last=m,mid,flag=0;


18.
scanf
(
"%d"
,&x);


19.
while
 
(frist<=last)


20.
{


21.
mid=frist+(last-frist)/2;


22.
if
(x==s[mid])


23.
{


24.
flag=1;


25.
break
;


26.
}


27.
else
 
if
(s[mid]<x)


28.
frist=mid+1;


29.
else


30.
last=mid-1;


31.
}


32.
if
(flag==1)


33.
printf
(
"YES\n"
);


34.
else


35.
printf
(
"NO\n"
);


36.
}


37.
return
 
0;


38.
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  nyoj 快排 二分法