PAT甲题题解-1078. Hashing (25)-hash散列
二次方探测解决冲突
一开始理解错了,难怪一直WA。
先寻找key%TSize的index处,如果冲突,那么依此寻找
(key+j*j)%TSize的位置,j=1~TSize-1
如果都没有空位,则输出'-'
- #include <iostream>
- #include <cstdio>
- #include <algorithm>
- #include <string.h>
- #include <cmath>
- using namespace std;
- const int maxn=; //之前设置的是10005,然后比10000大的第一个素数是10007
- int isprime[maxn];
- int prime[maxn];
- int cnt=;
- int hashing[maxn]; //hash表
- /*
- 素数筛选法,筛选出素数,在存储
- 然后用二分查找,用来查找比MSize大的最小的素数
- */
- void init(){
- for(int i=;i<maxn;i++)
- isprime[i]=;
- isprime[]=;
- for(int i=;i<maxn;i++){
- if(isprime[i]){
- for(int j=i*;j<maxn;j+=i)
- isprime[j]=;
- }
- }
- for(int i=;i<maxn;i++){
- if(isprime[i]){
- prime[cnt++]=i;
- //printf("%d\n",i);
- }
- }
- }
- /*
- 从素数中找出比给定的MSize大的最小素数
- */
- int binarySearch(int val){
- int l=,r=cnt-,mid;
- while(l<r-){
- mid=(l+r)>>;
- if(val<=prime[mid])
- r=mid;
- else
- l=mid;
- }
- return prime[r];
- }
- int main()
- {
- int m,n,TSize;
- init();
- scanf("%d %d",&m,&n);
- if(m==)
- m=; //如果m=1,则二分查找出来的是3,所以先要处理下
- if(!isprime[m]){
- TSize=binarySearch(m);
- }
- else
- TSize=m;
- //printf("%d\n",TSize);
- int a[maxn];
- memset(hashing,,sizeof(hashing));
- int pos,key;
- for(int i=;i<n;i++){
- scanf("%d",&key);
- pos=-;
- int idx;
- for(int j=;j<TSize;j++){
- idx=(key+j*j)%TSize;
- if(!hashing[idx]){
- hashing[idx]=;
- pos=idx;
- break;
- }
- }
- if(i==){
- printf("%d",pos);
- }
- else{
- if(pos==-)
- printf(" -");
- else
- printf(" %d",pos);
- }
- }
- return ;
- }
PAT甲题题解-1078. Hashing (25)-hash散列的更多相关文章
- PAT甲题题解-1010. Radix (25)-二分搜索
题意:给出n1和n2,以及其中一个数的进制,问另一个数是多少进制的情况下,才会是两个数相等.不存在的话,则输出Impossible 这题思路很简单,但是要考虑的比较多,在简单题里面算是比较好的. 有两 ...
- PAT甲题题解-1032. Sharing (25)-链表水题
#include <iostream> #include <cstdio> #include <algorithm> #include <string.h&g ...
- PAT甲题题解-1003. Emergency (25)-最短路径+路径数目
给出n个城市,m条边,起始点c1和目的点c2接下来给出n个城市的队伍数以及m条双向边问你求c1到c2的所有最短路径数目,以及其中经过的最多队伍数 先最短路dijkstra,同时建立vector数组pr ...
- PAT甲题题解-1029. Median (25)-求两序列的中位数,题目更新了之后不水了
这个是原先AC的代码,但是目前最后一个样例会超内存,也就是开不了两个数组来保存两个序列了,意味着我们只能开一个数组来存,这就需要利用到两个数组都有序的性质了. #include <iostrea ...
- PAT甲题题解-1070. Mooncake (25)-排序,大水题
#include <iostream> #include <cstdio> #include <algorithm> #include <string.h&g ...
- PAT Basic 1043 输出PATest (20分)[Hash散列]
题目 给定⼀个⻓度不超过10000的.仅由英⽂字⺟构成的字符串.请将字符重新调整顺序,按"PATestPATest-."这样的顺序输出,并忽略其它字符.当然,六种字符的个数不⼀定是 ...
- PAT甲题题解-1006. Sign In and Sign Out (25)-找最小最大
判断哪个人最早到,哪个人最晚走水,就是找最大值最小值 #include <iostream> #include <cstdio> #include <algorithm& ...
- PAT甲题题解-1012. The Best Rank (25)-排序水题
排序,水题因为最后如果一个学生最好的排名有一样的,输出的课程有个优先级A>C>M>E那么按这个优先级顺序进行排序每次排序前先求当前课程的排名然后再与目前最好的排名比较.更新 至于查询 ...
- PAT甲题题解-1033. To Fill or Not to Fill (25)-模拟
模拟先说一下例子,最后为方便起见,在目的地安增加一个费用为0的加油站0 1 2 3 4 5 6 7 87.1 7.0 7.2 6.85 7.5 7.0 7.3 6.0 00 150 200 300 4 ...
随机推荐
- 2.1Python基础语法(一)之注释与数据类型:
返回总目录 目录: 1.注释 2.乱码 3.变量 4.数据类型 5.数据的转换 6.动态,静态和强类型,弱类型 (一)注释:(编译时是被编译器忽略的) 1.注释的分类: 2.特殊注释: (二)乱码:( ...
- javascript,object,IDispatchEx笔记
//js: var testObj=new Object; //com内部: testObj=Object::InvokeEx(wFlags==DISPATCH_CONSTRUCT); //注: // ...
- Office Web app server 2013 目前无法和windows server 2012 R2兼容。
另外旧版的office文档和PDF格式不支持预览功能.
- python闭包,看不懂请揍我
什么是闭包? 闭包就是一个个内嵌函数+内嵌函数里面引用了外部变量+返回这个内嵌函数(一般是这样) 为什么使用闭包? 有点类似与函数模板?.. 举一个实际的例子: class people: name ...
- os.path.md
os.path 我们可以利用os.path模块提供的函数更容易地在跨平台上处理文件. 即使我们的程序不是用于夸平台, 也应该使用os.path来让路径名字更加可靠. Parsing Paths os. ...
- Netty 聊天小程序
这节讲解基于 Netty 快速实现一个聊天小程序. 一.服务端 1. SimpleChatServerHandler(处理器类) 该类主要实现了接收来自客户端的消息并转发给其他客户端. /** * 服 ...
- Linux设置口令复杂度和口令定期更换策略
Linux 密码复杂度设置pam_pwquality.pam_passwdqc(centos7) 1.Linux对应的密码策略模块有:pam_passwdqc 和 pam_pwquality . 其中 ...
- Javascript 及 CSS3 实现进度条效果
Javascript 及 CSS3 实现进度条效果 一:css2 属性clip实现网页进度条: 在实现之前,我们先来介绍一下clip属性,因为这个属性在css2.1中很少使用到,所以我们有必要来了解 ...
- JAVA框架 json数据交互
一.导入依赖: <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId& ...
- SQL 提高性能
参考博客:http://www.cnblogs.com/jiekzou/p/5988099.html 非常感谢博主分享. 1.set nocount on 关闭行基数信息,减少网络通信,提高程序性能 ...