`
woxiaoe
  • 浏览: 286355 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

3349 hash 链表

J# 
阅读更多

http://acm.pku.edu.cn/JudgeOnline/problem?id=3349

题意为判断是后有相同的雪花,雪花的花瓣可能是顺时针,或逆时针描述,故对hash值相同的还要进行比较,相同则推出,否则把该雪花加到该hash对应的链表上

code:(时间复杂度还是太高了)

  1. #include<iostream>
  2. usingnamespacestd;
  3. structnode
  4. {
  5. intflag;
  6. inta[6];
  7. node*next;
  8. }hash[150006];
  9. intfac(inttt[]);
  10. intcomp(inta[],intb[]);
  11. intmain()
  12. {
  13. freopen("in.txt","r",stdin);
  14. intt[6];
  15. intn,i,sum,j;
  16. intflag(1);
  17. for(i=0;i<100001;i++)
  18. {
  19. hash[i].flag=0;
  20. hash[i].next=NULL;
  21. }
  22. cin>>n;
  23. for(i=0;i<n;i++)
  24. {
  25. for(j=0;j<6;j++)
  26. scanf("%d",&t[j]);
  27. sum=fac(t);
  28. if(!hash[sum].flag)
  29. {
  30. hash[sum].flag=1;
  31. memcpy(hash[sum].a,t,sizeof(t));
  32. }
  33. else
  34. {
  35. nodetemp=hash[sum];
  36. nodetemp1;
  37. temp1.flag=0;
  38. temp1.next=NULL;
  39. memcpy(temp1.a,t,sizeof(t));
  40. while(1)
  41. {
  42. if(comp(temp.a,t))
  43. {
  44. cout<<"Twinsnowflakesfound."<<endl;
  45. exit(-1);
  46. }
  47. if(temp.next==NULL)
  48. break;
  49. temp=*temp.next;
  50. }
  51. temp.next=&temp1;
  52. }
  53. }
  54. cout<<"Notwosnowflakesarealike."<<endl;
  55. return0;
  56. }
  57. intfac(inttt[])
  58. {
  59. __int64sum(0);
  60. inti;
  61. for(i=0;i<6;i++)
  62. sum+=tt[i];
  63. returnsum%149997;
  64. }
  65. intcomp(inta[],intb[])
  66. {
  67. inti,j,t;
  68. for(i=0;i<6;i++)
  69. if(a[i]==b[0])
  70. {
  71. if(i==6)
  72. return0;
  73. for(j=1;j<6;j++)//往前
  74. {
  75. if((i+j)>=6)
  76. t=(i+j)-6;
  77. else
  78. t=i+j;
  79. if(a[t]==b[j])
  80. continue;
  81. else
  82. break;
  83. }
  84. if(j==6)
  85. return1;
  86. for(j=1;j<6;j++)//往后
  87. {
  88. if(i-j<0)
  89. t=i-j+6;
  90. else
  91. t=i-j;
  92. if(a[t]==b[j])
  93. continue;
  94. else
  95. break;
  96. }
  97. if(j==6)
  98. return1;
  99. }
  100. return0;
  101. }
分享到:
评论

相关推荐

    面向分布式查询认证的分层Hash链表.pdf

    本文研究的目标是降低现有分布式查询认证方案(如认证跳表和签名链)的成本,并提出了分层Hash链表(Hierarchical Hash List,HHL)这一新的认证数据结构。 分层Hash链表(HHL)是一种数据结构,用于确保查询结果的...

    双向链表与hash表

    本话题主要探讨两种常用的数据结构:双向链表和哈希表,它们在Linux内核以及普通用户态C程序中有广泛的应用。 **双向链表** 双向链表是一种线性数据结构,每个节点包含数据和两个指针,分别指向前一个节点和后一个...

    windows vc++ 哈希链表

    3. **C++类设计**:`MyHashTab`可能是主类,负责管理整个哈希表,而`Hash`和`MyHashTab.cpp`可能包含具体的哈希表操作实现。`BookData`和`ComputerData`可能是自定义的数据结构,表示存储在哈希表中的元素类型,它们...

    内核通用链表哈希链表表list.h

    在Linux内核中,`list.h` 是一个关键的头文件,它定义了两种重要的数据结构:通用链表(Generic List)和哈希链表。这些数据结构在内核中被广泛用于各种目的,如内存管理、设备驱动、文件系统等。在用户态下,这些...

    hash表实现举例 hash结构中带超时链表的实现

    1. hash key值计算,key的比较,内存分配,可以通过实现模板类重新定制 2. 实现按插入时间的先后,通过有序链表访问节点。用于按照时间先后,快速遍历... hash 实现快速存取, 链表快速实现超时hash节点的删除。

    list_code.rar_hash unix_单向链表

    `list_code.rar_hash unix_单向链表`这个标题暗示了我们有一个压缩包,包含了相关代码示例,适用于Unix系统,包含单向链表和哈希表的操作。 首先,让我们深入理解单向链表。单向链表是一种线性数据结构,每个元素...

    linux内核链表介绍与了解

    在Linux内核2.6版本中,引入了两种扩展的链表数据结构:读拷贝更新(Read-Copy Update, RCU)链表和HASH链表(hlist)。RCU是一种优化技术,允许在读多写少的场景下,即使在数据结构正在被修改的情况下,也能安全地...

    题目整理(链表).pdf

    链表的知识点包括链表的基本概念、链表的类型、链表的操作、链表的应用、链表的优缺点、链表的实现、链表的算法、链表的题目、链表的实际应用、链表的高级应用、链表的优化、链表的安全、链表的发展、链表的研究、...

    uthash开源的hash函数实现

    6. **性能**:由于 UTHASH 使用了简单的哈希函数和链表法处理冲突,其性能可能会受到冲突率的影响。在设计结构体和选择哈希字段时,应尽量减少冲突,以优化查找和插入性能。 7. **源码可扩展性**:虽然 UTHASH 是一...

    linux下C实现的哈希表

    int hash_insert(Hash* * hp,int data)//返回0表示成功 { if((*hp) == NULL)return 1; if(((*hp)-&gt;num)==14) { printf("hash full\n"); return 1;//哈希表满了 } if((*hp)-&gt;pNode[KEY(data)].data==8888)//...

    linux链表详解

    随着Linux内核的发展,为了应对复杂场景下的并发控制和性能优化需求,内核引入了读拷贝更新(RCU)和HASH链表(hlist)两种扩展链表结构。 - **RCU链表**:针对读多写少的场景,RCU链表允许在不阻塞读操作的情况下...

    哈希链表c语言实现,可以直接用来做项目

    哈希链表是一种高效的数据结构,它结合了哈希表的快速查找特性和链表的灵活插入删除功能。在C语言中实现哈希链表,需要理解哈希函数、链表结构以及如何将两者结合起来。这里我们将深入探讨哈希链表的概念、C语言中的...

    Java用数组和链表的方式简单实现HashMap的增删改功能 数组和链表.pdf

    数组用于存储键值对,链表用于解决哈希冲突,红黑树用于优化链表的查找效率。 put方法 put方法用于将键值对添加到HashMap中。put方法的实现过程如下: 1. 判断键值对数组table[i]是否为空或为null,如果为空,...

    判断链表是否相交的几种算法1

    **解法二**引入了哈希映射(hash map)来优化搜索过程,称为“哈希计数法”。首先遍历h1,计算每个节点的哈希值并存储在map中。接着遍历h2,计算每个节点的哈希值并查找map,一旦找到匹配项,即表示两个链表相交。...

    Java基础-模拟HashMap集合(基于数组和链表) 数组和链表.pdf

    HashMap的实现基于Hash函数和链表,通过Hash函数将键转换为索引,然后将对应的值存储在链表中。 模拟HashMap的实现 我们将使用Java语言来模拟HashMap的实现。首先,我们需要定义一个接口MyMap,用于描述HashMap的...

    深入分析 Linux操作系统的内核链表

    Linux 2.6内核进一步扩展了链表功能,引入了两种新的数据结构:读拷贝更新(Read-Copy-Update,简称RCU)链表和HASH链表(hlist)。RCU链表优化了多处理器环境下的并发访问,而HASH链表则提供了更高效的查找性能。...

    航空订票系统--链表实现.rar

    此外,为了优化查询性能,可以结合哈希表(Hash Table)和链表。哈希表提供快速查找功能,将航班号、乘客身份证号等作为键,链表节点作为值,实现高效的查找和更新操作。 最后,链表实现的航空订票系统还应包含异常...

    哈希表------链表

    哈希表--链表 哈希表--链表 哈希表--链表 哈希表--链表哈希表--链表 哈希表--链表哈希表--链表 哈希表--链表哈希表--链表 哈希表--链表哈希表--链表 哈希表--链表

    HashMap扩容时的rehash方法中(e.hash & oldCap) == 0算法推导.docx

    这是因为`oldCap`的二进制表示中只有一个1,位于最左边,所以当`e.hash`与`oldCap`进行按位与运算时,如果结果为0,说明`e.hash`的最高位与`oldCap`的最高位不同,即`e.hash`的最高位为0,这意味着元素原本的索引...

    C语言链表操作

    本主题聚焦于“C语言链表操作”,这涉及到如何在C语言中创建、管理和操作链表数据结构。链表不同于数组,它不连续存储元素,而是通过指针连接各个节点,每个节点包含数据和指向下一个节点的引用。 链表操作主要包括...

Global site tag (gtag.js) - Google Analytics