题目连接:http://codevs.cn/problem/1230/

说白了就是要我们自己手写一个哈希表的数据结构来实现加入和查找功能。map也能直接过(我第一次写就是用map骗AC的)

提一下个人理解的哈希表的实现(以下说的是线性寻址法)。假设有误还请各位大神不吝不吝赐教

用一个数组模拟哈希表,函数f(x)=数字x在哈希表中出现的下标的最小可能值。一般f(x)=x mod t,t就是哈希表的长度

以下就是一个哈希表的演示样例,假设遍历哈希表时指针走出了哈希表的终点。就进入起点又一次遍历

对于每次向哈希表中加入一个数x,从下标f(x)開始查找,以上文所说的遍历方式查找,直到找到装有x这个数的哈希表元素。返回查找成功(哈希表中有x这个数)。假设遍历过程中遇到了空的哈希表的一个元素就返回查找失败(哈希表中没有x这个数)。

插入元素的过程类似于查找。向哈希表中插入数字x时,首先从下标f(x)開始查找,直到找到第一个为0的哈希表元素,将数字x插入进去。

以下是此题代码:

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <algorithm> #define MAXN 1000008
#define MOD 1000007 using namespace std; int hashTable[MAXN]; void update(int x) //将数字x增加哈希表
{
int num=x;
x%=MOD;
while(1)
{
if(!hashTable[x])
{
hashTable[x]=num;
return;
}
if(hashTable[x]!=num)
{
x++;
if(x==MAXN) x=0;
}
else return;
}
} bool query(int x) //查找哈希表中是否有数字x
{
bool found=false;
int num=x;
x%=MOD;
while(1)
{
if(!hashTable[x]) return false;
if(hashTable[x]!=num)
{
x++;
if(x==MAXN) x=0;
}
else return true;
}
} int main()
{
int n,m,x;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
scanf("%d",&x);
update(x+1);
}
for(int i=1;i<=m;i++)
{
scanf("%d",&x);
if(query(x+1)) printf("YES\n");
else printf("NO\n");
}
return 0;
}



[Codevs 1230]元素查找(手写哈希表)的更多相关文章

  1. codevs——1230 元素查找

    时间限制: 1 s 空间限制: 128000 Ks 题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 Description 给出n个正整数,然后有m个询问,每个询问一个整数 ...

  2. PTA 7-42 整型关键字的散列映射(手写哈希表的线性探测法)

    本题考点: 整型哈希表的线性探测法 给定一系列整型关键字和素数P,用除留余数法定义的散列函数将关键字映射到长度为P的散列表中.用线性探测法解决冲突. 输入格式: 输入第一行首先给出两个正整数N(≤10 ...

  3. codevs 1230 元素查找

    题目链接:http://codevs.cn/problem/1230/ 题解: 会有很多方法写这道题,写个裸的哈希练练手 #include<cstdio> ,MOD=; int n,m,h ...

  4. HDU 5183 Negative and Positive (NP) (手写哈希)

    题目链接:HDU 5183 Problem Description When given an array \((a_0,a_1,a_2,⋯a_{n−1})\) and an integer \(K\ ...

  5. 手写9x9乘法表,冒泡排序

    手写9x9乘法表,冒泡排序 9x9乘法表 class Demo {public static void main(String[] args) {for(int x = 0;x <= 9; x+ ...

  6. redisTemplate写哈希表遇到的坑

    本文系原创,如有转载,请注明出处 在使用spring的redisTemplate进行redis哈希表的相关操作时,遇到了下面比较奇怪的情况: 1.删掉哈希表所属的key之后,重新get这个key的值, ...

  7. 【wikioi】1230 元素查找(巨水题+set/hash)

    http://wikioi.com/problem/1230/ 这题我真的不好意思写题解了...set练手.. #include <cstdio> #include <set> ...

  8. CODE[VS] 1230 元素查找

    1.题目戳这里 2.代码: #include<iostream> #include<algorithm> using namespace std; int n,m,a[1000 ...

  9. AC日记——元素查找 codevs 1230

    1230 元素查找  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 Description 给出n个正整数,然后有 ...

随机推荐

  1. isinstance 和 type 的区别

    class A: pass class B(A): pass isinstance(A(), A) # returns True type(A()) == A # returns True isins ...

  2. NOJ——1508火烧赤壁2(并查集+启发式合并+逆序加边)

    [1508] 火烧赤壁2 时间限制: 1000 ms 内存限制: 65535 K 问题描述 上次出了一道火烧赤壁的题目给当时的新生,也就是你们的上一届学长们做,那么这次,我又想到了另一个想法. 上次的 ...

  3. java面试题之Thread和Runnable是什么关系?

    Thread实现了Runnable接口,使得run方法支持多线程: 因类的单一继承原则,推荐多实用Runnable接口

  4. 常用的UltraEdit使用技巧

    Tip 1: Alt+C 列模式可以说最初选择使用这个文本编辑软件,原因很简单,就是因为"她"具有列编辑模式.如果您还不知道什么是列编辑模式的话,我想您应该好好研究一下啦.这是一个 ...

  5. hdu 4353 统计点在三角形内的个数

    Finding Mine Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tota ...

  6. JS判断SharePoint页面编辑状态

    这篇博客主要讲使用不同的客户端方式来判断页面的编辑模式. 1.当页面处于发布状态时,可以使用下面两种方式:if(g_disableCheckoutInEditMode == true) {   ale ...

  7. 转 C++构造函数、析构函数、虚函数之间的关系

    C++构造函数.析构函数.虚函数之间的关系 1. 如果我们定义了一个构造函数,编译器就不会再为我们生成默认构造函数了.2. 编译器生成的析构函数是非虚的,除非是一个子类,其父类有个虚析构,此时的函数虚 ...

  8. linux 头文件以及库的路径

    原来在编译的时候可以指定执行时去哪里找需要的lib文件,长知识了 本文详细介绍了Linux 下gcc头文件指定方法,以及搜索路径顺序的问题.另外,还总结了,gcc动态链接的方法以及路径指定,同样也讨论 ...

  9. HDU 5046 Airport【DLX重复覆盖】

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5046 题意: 给定n个城市的坐标,要在城市中建k个飞机场,使城市距离最近的飞机场的最长距离最小,求这 ...

  10. lms111,rplidar 方向和起始角

    上图中,从X反方向是开始,按顺时针方向增加,实际运转方向也为顺时针方向. lms111:正放时:数据按逆时针依次输出.(起始----->结束) 北阳:正放时:数据按逆时针依次输出