1390_散列1

2022-5-16 18:17| 发布者: Hocassian| 查看: 37| 评论: 0|原作者: 肇庆学院ACM合集

摘要:
C:\Users\Administrator\Downloads\2019-10-12-10-14-2-89503847175700-Problem List-采集的数据-后羿采集器.html

Pro.ID

1390

Title

散列1

Title链接

http://10.20.2.8/oj/exercise/problem?problem_id=1390

AC

14

Submit

82

Ratio

17.07%

时间&空间限制

  • Time Limit: 2000/1000 MS (Java/Others)     Memory Limit: 65536/65536 K (Java/Others)
  • 描述

    任务很简单:把一系列正整数(均唯一)插入到一个哈希表中,并输出每个数在哈希表中的位置。哈希函数定义为:H(key) = key % TSize ,其中TSize是哈希表的大小。采用"二次探测"解决冲突,只取正的增量,即1,4,9,...,i2

    注意到哈希表的大小最好为素数值,如果所给的哈希表大小不是素数,你需要寻找比原大小要大的最小的素数,以重新定义哈希表的大小。

    输入

    单测试用例。

    第一行是两个正整数 MSize(≤ 104)和 N(≤ MSize),MSize 表示原先定义的哈希表大小,N表示输入的数的个数。

    第二行是N个空格分隔的正整数。

    输出

    Description

    任务很简单:把一系列正整数(均唯一)插入到一个哈希表中,并输出每个数在哈希表中的位置。哈希函数定义为:H(key) = key % TSize ,其中TSize是哈希表的大小。采用"二次探测"解决冲突,只取正的增量,即1,4,9,...,i2

    注意到哈希表的大小最好为素数值,如果所给的哈希表大小不是素数,你需要寻找比原大小要大的最小的素数,以重新定义哈希表的大小。

    Input

    单测试用例。

    第一行是两个正整数 MSize(≤ 104)和 N(≤ MSize),MSize 表示原先定义的哈希表大小,N表示输入的数的个数。

    第二行是N个空格分隔的正整数。

    Output

    输出一行:每个正整数对应的存放位置(从0开始)。每个位置之间用一个空格分隔,行末没有空格。

    如果某个数无法放入哈希表,则它的存放位置输出 - 。

    Sample Input

    4 4
    10 6 4 15

    Sample Output

    0 1 4 -

    Hint

    解释:原先定义的哈希表大小是4,不是素数,因此重新定义哈希表的大小为比4大的最小的素数——5。第一个元素10,存放位置是10%5=0;第二个元素6,存放位置是6%5=1;第三个元素4,存放位置是4%5=4;第四个元素15,存放位置本来是15%5=0,但位置0已被10占住了;二次探测往右移1位,但位置1也同样被占用;往右移4位,位置4同样被占用;往右移9位(由于循环,其实就是9%5=4),也是位置4;往右移16位(由于循环,其实就是16%5=1),位置1,因此,第四个元素放不了。

    Author

    样例输入

    4 4
    10 6 4 15

    样例输出

    0 1 4 -

    提示

    解释:原先定义的哈希表大小是4,不是素数,因此重新定义哈希表的大小为比4大的最小的素数——5。第一个元素10,存放位置是10%5=0;第二个元素6,存放位置是6%5=1;第三个元素4,存放位置是4%5=4;第四个元素15,存放位置本来是15%5=0,但位置0已被10占住了;二次探测往右移1位,但位置1也同样被占用;往右移4位,位置4同样被占用;往右移9位(由于循环,其实就是9%5=4),也是位置4;往右移16位(由于循环,其实就是16%5=1),位置1,因此,第四个元素放不了。

    作者


    路过

    雷人

    握手

    鲜花

    鸡蛋

    最新评论

    返回顶部