nyoj 86 找球号(一)
找球号(一)
- 描述
- 在某一国度里流行着一种游戏。游戏规则为:在一堆球中,每个球上都有一个整数编号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
这题两种方法,一种简单但速度较慢,一种速度很快,但是要自己维护一棵树
第一种使用stl的set,用时1700MS,代码只有30行,简单易用
#include<iostream>
#include<set>
#include<string>
using namespace std;
int main()
{
set<int> set_num;
int n , m;
int num;
cin >> n;
cin >> m;
while(n--)
{
cin >> num;
set_num.insert (num);
}
while(m--)
{
cin>>num;
if(set_num.count (num))
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return 0;
}
第二种方法是自己维护一棵二分查找树,代码写了100多行,比较罗嗦,但用时300ms,差距挺大的
#include<stdio.h>
#include<stdlib.h>
typedef struct NODE
{
int num;
bool flag;
struct NODE * left , *right;
}Node;
Node haxi[5009];
void insert(Node * head , Node * new_node)
{
if(head->flag == 0)
{
head->num = new_node->num;
head->flag = 1;
free(new_node);
}
else
{
for( ; head != NULL; )
{
if(new_node->num > head->num)
{
if(head->right == NULL)
{
head->right = new_node;
return ;
}
else
head = head->right;
}
else if(new_node->num < head->num)
{
if(head->left == NULL)
{
head->left = new_node;
return ;
}
else
head = head->left;
}
else
{
free(new_node);
return ;
}
}
}
}
int search_node(Node * head , int num)
{
if(head->flag == 0)
return 0;
else
{
for( ; head != NULL; )
{
if(num > head->num)
{
if(head->right == NULL)
return 0;
else
head = head->right;
}
else if(num < head->num)
{
if(head->left == NULL)
return 0;
else
head = head->left;
}
else
return 1;
}
}
}
int main()
{
int i , j , num;
Node * new_node; scanf("%d %d" , &i , &j);
while(i--)
{
new_node = (Node *) calloc(1 , sizeof(Node));
scanf("%d" , &new_node->num );
insert(&haxi[new_node->num % 5009] , new_node);
}
while(j--)
{
scanf("%d" , &num);
if(search_node(&haxi[num % 5009] , num) == 1)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}
nyoj 86 找球号(一)的更多相关文章
- nyoj 86 找球号(一)
找球号(一) 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 在某一国度里流行着一种游戏.游戏规则为:在一堆球中,每个球上都有一个整数编号i(0& ...
- nyoj 86 找球号(一)(set,map)
找球号(一) 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 在某一国度里流行着一种游戏.游戏规则为:在一堆球中,每个球上都有一个整数编号i(0& ...
- NYOJ 138 找球号(二) bitset 二进制的妙用
找球号(二) 时间限制:1000 ms | 内存限制:65535 KB 难度:5 描述 描述 在某一国度里流行着一种游戏.游戏规则为:现有一堆球中,每个球上都有一个整数编号i(0<=i< ...
- NYOJ 138 找球号(二) (哈希)
题目链接 描述 在某一国度里流行着一种游戏.游戏规则为:现有一堆球中,每个球上都有一个整数编号i(0<=i<=100000000),编号可重复,还有一个空箱子,现在有两种动作:一种是&qu ...
- 简答哈希实现 (nyoj 138 找球号2)
例题链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=138 代码目的:复习哈希用 代码实现: #include "stdio.h&qu ...
- nyoj 138 找球号(二)(哈希)
题目:nyoj——138 /*** 哈希求解...采用链表保存 插入时,可以去除重复 查找 找到该组,然后在改组的查找 当这个组不存在时或是没有找到时是 NO 其他是YES 1e6+1 时间最短 */ ...
- nyoj 528 找球号(三)(哈希)
点解:题目链接 两种办法,1是使用容器set做 2必须知道这个结论, 突然感觉数论很强大啊,,,, /*//set容器处理 出一次加进去,再出现删掉,这个最后留下的就是那个只出现基数次的 #incl ...
- nyoj138 找球号(二)_离散化
找球号(二) 时间限制:1000 ms | 内存限制:65535 KB 难度:5 描述 在某一国度里流行着一种游戏.游戏规则为:现有一堆球中,每个球上都有一个整数编号i(0<=i< ...
- ACM 找球号(一)
找球号(一) 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 在某一国度里流行着一种游戏.游戏规则为:在一堆球中,每个球上都有一个整数编号i(0<=i<= ...
随机推荐
- JQuery Uplodify上传附件(同一个页面多个uplodify控件解决方案)
功能描述:实现同一页面中多个不同附件的上传保存,且做到最大程度的减少代码修改量(最大程度的公用),为了方便实现垃圾数据和垃圾文件的处理,项目采用临时文件夹的方式:即:文件自动上传先保存到临时文件夹下, ...
- newman 3.0改变
https://github.com/postmanlabs/newman/blob/develop/MIGRATION.md
- FileMode文件模式
一.FileMode.Append Append追加: 如果文件存在,则打开文件,把指针指到文件的末尾:如果不存在,则新建文件 二.FileMode.Create Create:新建 如果文件存在,则 ...
- Tortoisesvn单个文件夹checkout
- Android 查看內存使用
一.使用dumpsys meminfo命令 1.使用dumpsys meminfo查看内存使用情况 2.过滤某个进程可以使用 dumpsys meminfo | grep -i phone 二,使用t ...
- [java] 40个Java多线程问题总结
40个问题汇总 1.多线程有什么用? 一个可能在很多人看来很扯淡的一个问题:我会用多线程就好了,还管它有什么用?在我看来,这个回答更扯淡.所谓"知其然知其所以然","会用 ...
- mootools里选择器$,$$,$E,$ES等的区别
区别就是 $和$$都是1个参数, $适用于ID,或者ID代表的对象 $$适用于CSS选择器 $E和$ES,有2个参数,第二个参数是可选参数代表(filter,即某个ID范围里的元素) $E('inpu ...
- IOS开发-视频,音频,录音简单总结
/***** * 1. 视频播放 * * @格式:mp4 mov m4v m2v 3gp 3g2 * * @系统框架使用:#import <MediaPlayer/MediaPlayer.h ...
- 【linux】wc命令
Linux系统中的wc(Word Count)命令的功能为统计指定文件中的字节数.字数.行数,并将统计结果显示输出. 1.命令格式: wc [选项][文件] 2.命令参数: -c char统计字节数. ...
- VS2013 启动时遇到空白窗口
安装了VS2013 ,然后打开,遇到空白窗口,等了10几秒无果. 我先是修复了VS2013,然后再打开VS2013,则显示登录微软账号的窗口.修复完2013时正好18:08,可能是下班了可以上网,才正 ...