PAT 1078. Hashing
The task of this problem is simple: insert a sequence of distinct positive integers into a hash table, and output the positions of the input numbers. The hash function is defined to be "H(key) = key % TSize" where TSize is the maximum size of the hash table. Quadratic probing (with positive increments only) is used to solve the collisions.
Note that the table size is better to be prime. If the maximum size given by the user is not prime, you must re-define the table size to be the smallest prime number which is larger than the size given by the user.
Input Specification:
Each input file contains one test case. For each case, the first line contains two positive numbers: MSize (<=104) and N (<=MSize) which are the user-defined table size and the number of input numbers, respectively. Then N distinct positive integers are given in the next line. All the numbers in a line are separated by a space.
Output Specification:
For each test case, print the corresponding positions (index starts from 0) of the input numbers in one line. All the numbers in a line are separated by a space, and there must be no extra space at the end of the line. In case it is impossible to insert the number, print "-" instead.
Sample Input:
4 4
10 6 4 15
Sample Output:
0 1 4 -
// 1078pat.cpp : 定义控制台应用程序的入口点。
// #include <iostream>
#include <string.h>
#include <vector>
using namespace std; const int N=;
int primes[N]; //找出所有的质数
bool mark[N]; //标记所有的质数
int res[N];
bool hashs[N];
vector<int> input;
int primeSize; void init()
{
memset(mark,false,N*sizeof(bool));
for(int i=;i<N;++i)
res[i]=-;
primeSize=;
for(int i=;i<N;++i)
{
if(mark[i]) continue;
primes[primeSize++]=i;
if(i>=) continue;
for(int j=i*i;j<N;j+=i)
{
mark[j]=true;
}
}
}
int main()
{
init();
int Msize,n;
cin>>Msize>>n;
if(Msize<n) //保证Msize<n;
Msize=n;
if(Msize<) //保证Msize==1时,令Msize=2;
Msize=;
if(mark[Msize])
{
for(int i=;i<N;++i)
{
if(primes[i]>Msize)
{
Msize=primes[i];
break;
}
}
}
int buf;
int position;
for(int i=;i<n;++i)
{
cin>>buf;
input.push_back(buf);
position=buf%Msize;
for(int j=position,k=;k<Msize;++k,j+=k*k)
//quadratic probing 0<=k<Msize
{
int newp=j%Msize;
if(!hashs[newp])
{
hashs[newp]=true;
res[buf]=newp;
break;
}
j=position;
}
}
for(int i=;i<n;++i)
{
if(i!=)
cout<<" ";
if(-==res[input[i]])
{
cout<<"-";
}
else
cout<<res[input[i]];
}
return ;
}
PAT 1078. Hashing的更多相关文章
- PAT 1078 Hashing[一般][二次探查法]
1078 Hashing (25 分) The task of this problem is simple: insert a sequence of distinct positive integ ...
- 1078. Hashing (25)【Hash + 探測】——PAT (Advanced Level) Practise
题目信息 1078. Hashing (25) 时间限制100 ms 内存限制65536 kB 代码长度限制16000 B The task of this problem is simple: in ...
- pat 甲级 1078. Hashing (25)
1078. Hashing (25) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue The task of t ...
- PAT 1145 1078| hashing哈希表 平方探测法
pat 1145: 参考链接 Quadratic probing (with positive increments only) is used to solve the collisions.:平方 ...
- PAT 甲级 1078 Hashing (25 分)(简单,平方二次探测)
1078 Hashing (25 分) The task of this problem is simple: insert a sequence of distinct positive int ...
- 1078 Hashing (25 分)
1078 Hashing (25 分) The task of this problem is simple: insert a sequence of distinct positive integ ...
- PAT甲题题解-1078. Hashing (25)-hash散列
二次方探测解决冲突一开始理解错了,难怪一直WA.先寻找key%TSize的index处,如果冲突,那么依此寻找(key+j*j)%TSize的位置,j=1~TSize-1如果都没有空位,则输出'-' ...
- PAT (Advanced Level) 1078. Hashing (25)
二次探测法.表示第一次听说这东西... #include<cstdio> #include<cstring> #include<cmath> #include< ...
- PAT甲级1078 Hashing【hash】
题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805389634158592 题意: 给定哈希表的大小和n个数,使用 ...
随机推荐
- Yii render和renderPartial的区别
以下由我们在信易网络公司开发项目的时候终结出的一些经验 在进行页面输出渲染的时候. 1.render 输出父模板的内容,将渲染的内容,嵌入父模板.|2.renderPartial 则不输出父模板的内容 ...
- php url字符转义操作
遇到一段代码,从数据库里读出来带 \ 字符 需要转义成中文~ 用到url_decode(); //$info 为刚从数据库中读取的二维数组 foreach($info as $key1 => & ...
- centos下redis安装
下载redis http://www.redis.cn/download.html 下载php的redis扩展 https://github.com/phpredis/phpredis#install ...
- yii 缓存探究
1.在配置文件中 //在权威指南上是'cache' 其实可以根据不同的缓存组件起不同的名称 //memcache缓存 'memcache' => array( 'class' => 'sy ...
- 简洁代码---python---string
判断字符串是否是回文的,即是否中心对称的: >>>return s[::-1] == s 对称返回True, 否则返回False
- IT新人养成与蘑菇理论
(一)来源及定义 “蘑菇定律”最早是在上世纪70年代一批年轻的电脑程序员编写的.当时,美国一批电脑程序员意外发现,一批刚从学校毕业的新人参加了工作,这些人很难适应工作环境.在这种情况下,这些电脑 ...
- POJ 1472 Instant Complexity 应该叫它编程题。。
题目:http://poj.org/problem?id=1472 这个题目是分到“模拟题”一类的,我觉得模拟的成分比较少,主要考察编程能力.独立写完这个题特别兴奋...所以我必须好好说一说,独家哦. ...
- Razor引擎总结
1.显示格式化小数:@(string.Format("{0:0.00}",ViewData["TradeAmount"].ToNullString()))
- Remove linked list elements | leetcode
Remove all elements from a linked list of integers that have value val. Example Given: 1 --> 2 -- ...
- 使用SeaJS实现模块化JavaScript开发(新)
本文转自张洋,因为SeaJS更新版本很快,所以原文中很多地方不太适用,在这里发布一个更新版. 前言 SeaJS是一个遵循CommonJS规范的JavaScript模块加载框架,可以实现JavaSc ...