找球号(一)

时间限制: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
//代码一AC:用邻接表-hash----就是有点耗内存#include<stdio.h>
#include<malloc.h>
struct Node
{int num;struct Node *next;
};int main()
{    int n,m,temp,i;struct Node *t1,*node;scanf("%d%d",&m,&n);node=(struct Node *)malloc(m*sizeof(struct Node));for(i=0;i<m;++i){//    node[i].num=i;node[i].next=NULL;}for(i=0;i<m;++i){scanf("%d",&temp);t1=(struct Node *)malloc(sizeof(struct Node));t1->num=temp;t1->next=node[temp%m].next;node[temp%m].next=t1;}for(i=0;i<n;++i){scanf("%d",&temp);t1=node[temp%m].next;while(t1){if(t1->num==temp){printf("YES\n");break;}t1=t1->next; }if(t1==NULL)printf("NO\n");    }return 0;
}//代码二:二分查找----超时#include<stdio.h>
#include<stdlib.h>
/*
//递归二分超时
int search(int *p,int t,int low,int high)
{int mid;//mid=(high+low)/2;mid=low+(high-low)/2if(p[mid]==t)return 1;if(low>=high)return 0;else if(p[mid]>t)return search(p,t,low,mid-1);elsereturn search(p,t,mid+1,high);
}
*/int search(int *p,int t,int low,int high)//仍然超时
{int mid;while(low<=high){mid=low+(high-low)/2;if(p[mid]==t)return 1;   else if(p[mid]<t)  low=mid+1;  else  high=mid-1;}return 0;
}int main()
{int n,m,i,j,t,flag=1;int *p;scanf("%d%d",&m,&n);p=(int *)malloc((m+1)*sizeof(int));for(i=1;i<=m;++i)scanf("%d",&p[i]);for(i=m;flag&&i>0;--i){flag=0;for(j=1;j<m;++j)//事实证明我的排序超时了if(p[j]>p[j+1]){flag=1;p[j]=p[j]^p[j+1];p[j+1]=p[j]^p[j+1];p[j]=p[j]^p[j+1];}}for(i=1;i<=n;++i){scanf("%d",&t);if(search(p,t,1,m))printf("YES\n");elseprintf("NO\n");}return 0;
}//代码三:网上AC代码,也是二分
#include<stdio.h>
#include<algorithm>
using namespace std;
int a[1000005];
int main()
{int n,s,t,i,j,flag1;scanf("%d %d",&s,&n);for(i=0;i<s;i++){scanf("%d",&a[i]);}sort(a,a+s);/*for(i=s;flag1&&i>0;--i)//改成冒泡超时{flag1=0;for(j=1;j<s;++j)if(a[j]>a[j+1]){flag1=1;a[j]=a[j]^a[j+1];a[j+1]=a[j]^a[j+1];a[j]=a[j]^a[j+1];}}*/for(i=0;i<n;i++){int first=0,last=s,mid,flag=0;//**标记**//scanf("%d",&t);while(first<=last)//**二分**//{mid=first+(last-first)/2;if(a[mid]==t){flag=1;break;}else if(a[mid]<t)first=mid+1;elselast=mid-1;}if(flag==1)printf("YES\n");elseprintf("NO\n");}return 0;
}        //代码四:最优代码2012年12月7日-----现在回过头来看 顿时明白了#include <stdio.h>
#define MAXN 3125010
int vis[MAXN] = {0} ;   // vis数组中存储的就是一个32位的二进制数,下标i代表所得数是32的多少倍,              //而其中存储的二进制数的每一位则代表所得数的关于32的模,很巧妙..
int main()
{int m , n , x ; int i ;scanf("%d%d", &m , &n ) ;for( i = 0 ; i < m ; ++i ){scanf("%d", &x ) ;vis[ x / 32 ] |= 1 << x % 32 ;}for( i = 0 ; i < n ; ++i ){scanf("%d", &x ) ;if( vis[ x / 32 ] & ( 1 << x % 32 ) )printf("YES\n");elseprintf("NO\n");}return 0 ;
}

转载于:https://www.cnblogs.com/dongsheng/archive/2012/06/25/2562877.html

NYOJ-86 找球号(一)相关推荐

  1. nyoj 86 找球号(一)

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

  2. NYOJ 138 找球号(二)哈希表

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

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

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

  4. NYOJ 题目528 找球号(三)

    找球号(三) 时间限制:2000 ms  |  内存限制:3000 KB 难度:2 描述 xiaod现在正在某个球场负责网球的管理工作.为了方便管理,他把每个球都编了号,且每个编号的球的总个数都是偶数 ...

  5. NOJ --138 找球号(二)

    最基础的哈希表用法,先看所要存的个数,一般都是10N+10的内存,这样相当于十个位置里面有一个,空间是足够的.之前一直一直都是超时,就是因为内存开小的话就会出现死循环,因为存不了那么多个数 #incl ...

  6. 1299: 【二分查找】找球号

    题目描述 在某一国度里流行着一种游戏.游戏规则为:在一堆球中,每个球上都有一个整数编号i(0<=i<=100000000),编号可重复,现在说 一个随机整数k(0<=k<=10 ...

  7. nyoj528 找球号(三) set容器的应用

    set容器的用法  具体可以看我的另外一篇stl的应用点击打开链接 #include <stdio.h> #include <set> using namespace std; ...

  8. nyoj-138-找球号(二)----hash算法之除留余数法+vector

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

  9. nyoj--86--找球号(一)(hashset二分)

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

最新文章

  1. 设计模式笔记(2)---单件模式(创建型)
  2. mvc ajax教程,MVC3----AJAX辅助方法
  3. centos7: ifconfig出现command not found解决办法
  4. spingboot集成webSocket
  5. nextcloud+nginx+mysql,Ubuntu搭建Nginx-Nextcloud环境
  6. mysql 视图 动态sql_sql-server – 使用动态Sql创建视图
  7. 杨洋python_杨洋老师 - 主页
  8. iOS 初识CoreBluetooth
  9. _stdcall函数调用约定详解
  10. 字大小数据 - 快速取模的C++实现
  11. 【压力测试】用JMeter进行百科网站压力测试
  12. TP5使用easywechat进行微信Native扫码支付
  13. iOS--上传AppStore时遇到的10个大坑
  14. 关于队里面最菜的在博客打卡第六天这件事
  15. python求梅森尼数_python3算梅森素数的最佳代码是什么?
  16. 经济学经典著作选读书单
  17. 机器人 零境交错吧_电击文库零境交错角色大全 最强角色选择推荐及属性数据汇总[多图]...
  18. docker部署nginx+tomcat架构
  19. 第一章【Oracle自动化部署脚本】诞生
  20. 百度推荐引擎及其背后的大数据架构揭秘

热门文章

  1. xml文件、jsp文件、sql文件、shell脚本文件注释
  2. 使用Oracle Wrap工具加密你的代码
  3. JavaScript——this与箭头函数
  4. VSCode插件开发全攻略
  5. 高级着色语言HLSL入门(4)
  6. pq 中m函数判断嵌套_你还在用IF函数进行逻辑判断吗?试试PQ,简单又实用
  7. msiafterburner并行配置不正确_dubbo常用配置及使用场景
  8. android列表的默认值,ListPreference默认值没有显示
  9. Sqoop导入数据--split by 和 --m(大于1)配合使用
  10. python安装selenium报错_新手用Python运行selenium的常见问题