http://acm.pku.edu.cn/JudgeOnline/problem?id=3349
题意为判断是后有相同的雪花,雪花的花瓣可能是顺时针,或逆时针描述,故对hash值相同的还要进行比较,相同则推出,否则把该雪花加到该hash对应的链表上
code:(时间复杂度还是太高了)
-
#include<iostream>
-
usingnamespacestd;
-
structnode
- {
-
intflag;
-
inta[6];
- node*next;
- }hash[150006];
-
intfac(inttt[]);
-
intcomp(inta[],intb[]);
-
intmain()
- {
-
freopen("in.txt","r",stdin);
-
intt[6];
-
intn,i,sum,j;
-
intflag(1);
-
for(i=0;i<100001;i++)
- {
- hash[i].flag=0;
- hash[i].next=NULL;
- }
- cin>>n;
-
for(i=0;i<n;i++)
- {
-
for(j=0;j<6;j++)
-
scanf("%d",&t[j]);
- sum=fac(t);
-
if(!hash[sum].flag)
- {
- hash[sum].flag=1;
-
memcpy(hash[sum].a,t,sizeof(t));
- }
-
else
- {
- nodetemp=hash[sum];
- nodetemp1;
- temp1.flag=0;
- temp1.next=NULL;
-
memcpy(temp1.a,t,sizeof(t));
-
while(1)
- {
-
if(comp(temp.a,t))
- {
-
cout<<"Twinsnowflakesfound."<<endl;
- exit(-1);
- }
-
if(temp.next==NULL)
-
break;
- temp=*temp.next;
- }
- temp.next=&temp1;
- }
- }
-
cout<<"Notwosnowflakesarealike."<<endl;
-
return0;
- }
-
intfac(inttt[])
- {
-
__int64sum(0);
-
inti;
-
for(i=0;i<6;i++)
- sum+=tt[i];
-
returnsum%149997;
- }
-
intcomp(inta[],intb[])
- {
-
inti,j,t;
-
for(i=0;i<6;i++)
-
if(a[i]==b[0])
- {
-
if(i==6)
-
return0;
-
for(j=1;j<6;j++)
- {
-
if((i+j)>=6)
- t=(i+j)-6;
-
else
- t=i+j;
-
if(a[t]==b[j])
-
continue;
-
else
-
break;
- }
-
if(j==6)
-
return1;
-
for(j=1;j<6;j++)
- {
-
if(i-j<0)
- t=i-j+6;
-
else
- t=i-j;
-
if(a[t]==b[j])
-
continue;
-
else
-
break;
- }
-
if(j==6)
-
return1;
- }
-
return0;
- }
分享到:
相关推荐
本文研究的目标是降低现有分布式查询认证方案(如认证跳表和签名链)的成本,并提出了分层Hash链表(Hierarchical Hash List,HHL)这一新的认证数据结构。 分层Hash链表(HHL)是一种数据结构,用于确保查询结果的...
本话题主要探讨两种常用的数据结构:双向链表和哈希表,它们在Linux内核以及普通用户态C程序中有广泛的应用。 **双向链表** 双向链表是一种线性数据结构,每个节点包含数据和两个指针,分别指向前一个节点和后一个...
3. **C++类设计**:`MyHashTab`可能是主类,负责管理整个哈希表,而`Hash`和`MyHashTab.cpp`可能包含具体的哈希表操作实现。`BookData`和`ComputerData`可能是自定义的数据结构,表示存储在哈希表中的元素类型,它们...
在Linux内核中,`list.h` 是一个关键的头文件,它定义了两种重要的数据结构:通用链表(Generic List)和哈希链表。这些数据结构在内核中被广泛用于各种目的,如内存管理、设备驱动、文件系统等。在用户态下,这些...
1. hash key值计算,key的比较,内存分配,可以通过实现模板类重新定制 2. 实现按插入时间的先后,通过有序链表访问节点。用于按照时间先后,快速遍历... hash 实现快速存取, 链表快速实现超时hash节点的删除。
`list_code.rar_hash unix_单向链表`这个标题暗示了我们有一个压缩包,包含了相关代码示例,适用于Unix系统,包含单向链表和哈希表的操作。 首先,让我们深入理解单向链表。单向链表是一种线性数据结构,每个元素...
在Linux内核2.6版本中,引入了两种扩展的链表数据结构:读拷贝更新(Read-Copy Update, RCU)链表和HASH链表(hlist)。RCU是一种优化技术,允许在读多写少的场景下,即使在数据结构正在被修改的情况下,也能安全地...
链表的知识点包括链表的基本概念、链表的类型、链表的操作、链表的应用、链表的优缺点、链表的实现、链表的算法、链表的题目、链表的实际应用、链表的高级应用、链表的优化、链表的安全、链表的发展、链表的研究、...
6. **性能**:由于 UTHASH 使用了简单的哈希函数和链表法处理冲突,其性能可能会受到冲突率的影响。在设计结构体和选择哈希字段时,应尽量减少冲突,以优化查找和插入性能。 7. **源码可扩展性**:虽然 UTHASH 是一...
int hash_insert(Hash* * hp,int data)//返回0表示成功 { if((*hp) == NULL)return 1; if(((*hp)->num)==14) { printf("hash full\n"); return 1;//哈希表满了 } if((*hp)->pNode[KEY(data)].data==8888)//...
随着Linux内核的发展,为了应对复杂场景下的并发控制和性能优化需求,内核引入了读拷贝更新(RCU)和HASH链表(hlist)两种扩展链表结构。 - **RCU链表**:针对读多写少的场景,RCU链表允许在不阻塞读操作的情况下...
哈希链表是一种高效的数据结构,它结合了哈希表的快速查找特性和链表的灵活插入删除功能。在C语言中实现哈希链表,需要理解哈希函数、链表结构以及如何将两者结合起来。这里我们将深入探讨哈希链表的概念、C语言中的...
数组用于存储键值对,链表用于解决哈希冲突,红黑树用于优化链表的查找效率。 put方法 put方法用于将键值对添加到HashMap中。put方法的实现过程如下: 1. 判断键值对数组table[i]是否为空或为null,如果为空,...
**解法二**引入了哈希映射(hash map)来优化搜索过程,称为“哈希计数法”。首先遍历h1,计算每个节点的哈希值并存储在map中。接着遍历h2,计算每个节点的哈希值并查找map,一旦找到匹配项,即表示两个链表相交。...
HashMap的实现基于Hash函数和链表,通过Hash函数将键转换为索引,然后将对应的值存储在链表中。 模拟HashMap的实现 我们将使用Java语言来模拟HashMap的实现。首先,我们需要定义一个接口MyMap,用于描述HashMap的...
Linux 2.6内核进一步扩展了链表功能,引入了两种新的数据结构:读拷贝更新(Read-Copy-Update,简称RCU)链表和HASH链表(hlist)。RCU链表优化了多处理器环境下的并发访问,而HASH链表则提供了更高效的查找性能。...
此外,为了优化查询性能,可以结合哈希表(Hash Table)和链表。哈希表提供快速查找功能,将航班号、乘客身份证号等作为键,链表节点作为值,实现高效的查找和更新操作。 最后,链表实现的航空订票系统还应包含异常...
哈希表--链表 哈希表--链表 哈希表--链表 哈希表--链表哈希表--链表 哈希表--链表哈希表--链表 哈希表--链表哈希表--链表 哈希表--链表哈希表--链表 哈希表--链表
这是因为`oldCap`的二进制表示中只有一个1,位于最左边,所以当`e.hash`与`oldCap`进行按位与运算时,如果结果为0,说明`e.hash`的最高位与`oldCap`的最高位不同,即`e.hash`的最高位为0,这意味着元素原本的索引...
本主题聚焦于“C语言链表操作”,这涉及到如何在C语言中创建、管理和操作链表数据结构。链表不同于数组,它不连续存储元素,而是通过指针连接各个节点,每个节点包含数据和指向下一个节点的引用。 链表操作主要包括...