点击打开链接

找球号(一)

时间限制:3000 ms  |  内存限制:65535 KB
难度:3
描述
在某一国度里流行着一种游戏。游戏规则为:在一堆球中,每个球上都有一个整数编号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 找球号(一)的更多相关文章

  1. nyoj 86 找球号(一)

    找球号(一) 时间限制:3000 ms  |            内存限制:65535 KB 难度:3   描述 在某一国度里流行着一种游戏.游戏规则为:在一堆球中,每个球上都有一个整数编号i(0& ...

  2. nyoj 86 找球号(一)(set,map)

    找球号(一) 时间限制:3000 ms  |            内存限制:65535 KB 难度:3   描述 在某一国度里流行着一种游戏.游戏规则为:在一堆球中,每个球上都有一个整数编号i(0& ...

  3. NYOJ 138 找球号(二) bitset 二进制的妙用

    找球号(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:5 描述 描述 在某一国度里流行着一种游戏.游戏规则为:现有一堆球中,每个球上都有一个整数编号i(0<=i< ...

  4. NYOJ 138 找球号(二) (哈希)

    题目链接 描述 在某一国度里流行着一种游戏.游戏规则为:现有一堆球中,每个球上都有一个整数编号i(0<=i<=100000000),编号可重复,还有一个空箱子,现在有两种动作:一种是&qu ...

  5. 简答哈希实现 (nyoj 138 找球号2)

    例题链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=138 代码目的:复习哈希用 代码实现: #include "stdio.h&qu ...

  6. nyoj 138 找球号(二)(哈希)

    题目:nyoj——138 /*** 哈希求解...采用链表保存 插入时,可以去除重复 查找 找到该组,然后在改组的查找 当这个组不存在时或是没有找到时是 NO 其他是YES 1e6+1 时间最短 */ ...

  7. nyoj 528 找球号(三)(哈希)

    点解:题目链接 两种办法,1是使用容器set做 2必须知道这个结论,  突然感觉数论很强大啊,,,, /*//set容器处理 出一次加进去,再出现删掉,这个最后留下的就是那个只出现基数次的 #incl ...

  8. nyoj138 找球号(二)_离散化

    找球号(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:5   描述 在某一国度里流行着一种游戏.游戏规则为:现有一堆球中,每个球上都有一个整数编号i(0<=i< ...

  9. ACM 找球号(一)

    找球号(一) 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 在某一国度里流行着一种游戏.游戏规则为:在一堆球中,每个球上都有一个整数编号i(0<=i<= ...

随机推荐

  1. Externalizable接口 序列化

    Java默认的序列化机制非常简单,而且序列化后的对象不需要再次调用构造器重新生成,但是在实际中,我们可以会希望对象的某一部分不需要被序列化,或者说一个对象被还原之后, 其内部的某些子对象需要重新创建, ...

  2. SQL Server 2008中SQL增强之三:Merge(在一条语句中使用Insert,Update,Delete) 一条语句实现两表同步(添加、删除、修改)

    MERGE 目标表 USING 源表 ON 匹配条件 WHEN MATCHED THEN 语句 WHEN NOT MATCHED THEN 语句; http://www.chinaz.com/prog ...

  3. LINQ To SQL 语法及实例大全

    http://blog.csdn.net/pan_junbiao/article/details/7015633 http://blog.csdn.net/pan_junbiao/article/de ...

  4. 剑指offer系列33-----把二叉树打印成多行

    [题目]从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. 方法一:直接打印 package com.exe7.offer; import java.util.LinkedList; i ...

  5. 【Struts2学习笔记-4】包含其他配置文件

    包含其他配置文件 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLI ...

  6. Ajax方法执行跳转或者加载操作系统报出这样错误Sys.WebForms.PageRequestManagerParserErrorException:如何让解决

    当你在代码中使用Response.Redirect();  或者Response.Write();难免会遇到Sys.WebForms.PageRequestManagerParserErrorExce ...

  7. ERP_Oracle Erp 11i 和 R12的区别概述(概念)

    2014-06-26 Created By BaoXinjian

  8. c++学习-链表

    静态链表: #include<iostream> #include<string> using namespace std; struct book{ int num; flo ...

  9. webView--总结

    Anaroid WebView API详解--http://blog.csdn.net/zhangcanyan/article/details/51344090;Android5.1系统WebView ...

  10. JAVA 想让类无法new,可以使用private将类的构造函数改为私有的,这样new的时候就会报错了

    JAVA 想让类无法new,可以使用private将构造函数改为私有的,这样new的时候就会报错了 主要用于,静态工具类,静态类不需要new,直接使用   类名.静态方法  即可调用 class D{ ...