问题 A: 哈希

问题 A: 哈希

时间限制: 1 Sec  内存限制: 128 MB
提交: 37  解决: 18
[提交][状态][讨论版][
命题人:外部导入][Edit] [TestData]

题目链接:http://acm.ocrosoft.com/problem.php?cid=1716&pid=0

题目描述

在数据结构中,我们学过哈希表。我们知道,哈希存储方法是一种根据关键码值(Key value)而直接进行访问的数据结构方法。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做哈希函数H(key),存放记录的数组叫做哈希表。
在哈希表的构造中,哈希函数的选取显得异常重要。比如,在存储一个班级所有学生的某一门学科成绩的时候(假设该班人数<100),每个学生的学号有10~12位,我们不可能开出这么大的数组来储存,由于每个学生的学号末2位均不相同,我们可以开一个大小为100的数组,假设一个同学的学号为090104100151,那么,我们可以将该同学的成绩记录在下标为51数组元素中。这里我们用到的哈希方法叫做除留余数法,即H(key)=key % p(此处的p100)。但是,这种哈希函数经常会产生冲突,即对于key1!=key2,却有H(key1)==H(key2)。现给定p以及n个关键码(key),问:按这种哈希函数对着n个关键码进行映射,是否有冲突。

输入

输入文件中包含多个测试数据。每个测试数据占两行。每个测试数据的第一行为2个数pn,第二行为n个关键码。其中pn为不大于10000的正整数,其它的数均为不大于10000000的正整数。
最后一行为0 0,表示输入结束。

输出

对于每个测试数据,如果存在冲突,则输出"Conflict",否则输出"All right"

样例输入

100 3

1002 1103 2111

13 5

2 3 5 13 15

0 0

样例输出

All right

Conflict

思路:题目叫哈希,我也不知道这个和哈希有啥关系,可能是告诉你某种哈希入门的思想吧,直接map一弄就好了。代码:

#include<bits/stdc++.h>

using namespace std;

map<int, int>sxw;

int main()

{

    int p, n;

    while (cin >> p >> n && p != 0 && n != 0)

    {

         int fla = 0;

         sxw.clear();

         for (int i = 1; i <= n; i++)

         {

             int x;

             cin >> x;

             if (sxw[x%p])//说明之前已经出现过这个学号了

             {

                  fla = 1;//标记

             }

             sxw[x%p] = 1;

         }

         if (fla == 0)

         {

             cout << "All right" << endl;

         }

         else cout << "Conflict" << endl;

    }

}

 

全部评论

相关推荐

大猪蹄子哥:1-谁教你这么写教育经历的……咱都这个学历了,很多公司要看本科、硕士,Gap Year的,你啪就给一个上大26届硕士,没了。 2-那堆奖学金揉成一行放最后得了,放前面显得你没技术自信,还是那句话,对于咱这个学历直接上重点,你这上半段看起来像个大专(无恶意 3-专业技能最好点出来细化方向,你熟悉的以太网是UDP还是TCP,是千兆还是万兆等等,多种信号处理……那你倒是说两个啊,后面空着干嘛,会的干嘛不讲 4-项目经历废话太多,描述不专业(怎么还有我,我们这种词),没有数据支撑(是婴儿还是巨人看不出来)。最后如果这些是真的XX项目、比赛,最好点出来,不然更显得像自学着玩的,或者说抄的(经典复现等于我做过 5-个人总结在咱这个分段没用
点赞 评论 收藏
分享
04-03 11:37
武汉大学 Java
高斯林的信徒:武大简历挂?我勒个骚岗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务