Pro.ID1390 Title散列1 Title链接http://10.20.2.8/oj/exercise/problem?problem_id=1390 AC14 Submit82 Ratio17.07% 时间&空间限制描述任务很简单:把一系列正整数(均唯一)插入到一个哈希表中,并输出每个数在哈希表中的位置。哈希函数定义为: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 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 样例输出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,因此,第四个元素放不了。 作者 |