poj 3349 snowflake 哈希表
来源:互联网 发布:小苍零食淘宝店 编辑:程序博客网 时间:2024/06/16 00:03
有n片雪花,每片雪花有6条臂。已知每片雪花每条臂的长度。如果两片雪花的各个臂的长度对应相等,则称这两片雪花是相同的。要求判断是否存在完全相同的雪花。需要注意臂长可能是按顺时针或者逆时针顺序给出的,并且可以从任意一个臂开始。比如说,{1 2 3 4 5 6}和{ 4 3 2 1 6 5}是相同的。
注意到0<n<=100000,臂长范围在(0,10000000]。直接比较的话复杂度是O(n^2),肯定会超时。考虑用哈希表,把6个臂长加起来,模一个很大的素数,所得结果作为一个数组的下标。用链表解决地址冲突问题。
代码如下:
#include <stdio.h>#include <stdlib.h>#define LOCAL#define PRIME 124567//换做更大的3214567运行时间并未改善。//哈希表struct snowflake{ int arms[6]; struct snowflake *next;};struct snowflake *a[PRIME];int judge(struct snowflake *p,struct snowflake *q){ int i; for(i=0;i<6;i++) { if(p->arms[0] == q->arms[i] && p->arms[1] == q->arms[(1+i)%6] && p->arms[2] == q->arms[(2+i)%6] && p->arms[3] == q->arms[(3+i)%6] && p->arms[4] == q->arms[(4+i)%6] && p->arms[5] == q->arms[(5+i)%6] ) return 1; if(p->arms[5] == q->arms[i] && p->arms[4] == q->arms[(1+i)%6] && p->arms[3] == q->arms[(2+i)%6] && p->arms[2] == q->arms[(3+i)%6] && p->arms[1] == q->arms[(4+i)%6] && p->arms[0] == q->arms[(5+i)%6] ) return 1; } return 0;}int ins(struct snowflake *p){ int index,i; struct snowflake *q; for(i=0;i<6;i++) { index += p->arms[i]; } index %= PRIME; q = a[index]; while(NULL != q) { if(judge(p,q)) return 1; q = q->next; } p->next =a[index]; a[index] = p; return 0;}int main(){ int n,i,j,flag; struct snowflake *p; #ifdef LOCAL if(NULL == freopen("t.txt","r",stdin)) printf("error redirecting\n"); #endif scanf("%d",&n); flag = 0; for(i=0;i<n;i++) { p = (struct snowflake*)malloc(sizeof(struct snowflake)); for(j=0;j<6;j++) { scanf("%d",&(p->arms[j])); } p->next = NULL; flag = ins(p); if(1 == flag) { printf("Twin snowflakes found.\n"); break; } } if(0 == flag) printf("No two snowflakes are alike.\n"); return 0;}
- poj 3349 snowflake 哈希表
- POJ 3349 Snowflake Snow Snowflakes(哈希表)
- POJ-3349 Snowflake Snow Snowflakes(哈希表)
- POJ 3349 Snowflake Snow Snowflakes(哈希表)
- POJ 3349 Snowflake Snow Snowflakes (哈希表)
- POJ 3349 Snowflake Snow Snowflakes(hash哈希表)
- POJ 3349 Snowflake Snow Snowflakes (哈希表)
- POJ 3349 Snowflake Snow Snowflakes (哈希表)
- poj 3349 Snowflake Snow
- POJ 3349 Snowflake Snow Snowflakes
- POJ 3349 Snowflake Snow Snowflakes
- poj 3349 Snowflake Snow Snowflakes
- POJ 3349 Snowflake Snow Snowflakes
- POJ 3349 Snowflake Snow Snowflakes
- poj-3349 Snowflake Snow Snowflakes
- POJ 3349 Snowflake Snow Snowflakes
- POJ 3349 Snowflake Snow Snowflakes
- POJ 3349 Snowflake Snow Snowflakes
- 算法:最长递增子序列、最长公共子串
- 省赛 双线程dp
- _com_util::ConvertBSTRToString 连接错误
- 下拉树~不断、持续完善中~
- 二叉树
- poj 3349 snowflake 哈希表
- Java对象创建方式及JVM对字符串处理
- 回文字符串
- Java学习笔记(AWT组件 之 按钮)
- Java数据类型与各数据库类型对应一览表
- android学习笔记---55_frame动画的实现,Java技术qq交流群:JavaDream:251572072
- 在日常工作中应用看板
- CSS 中的分离、抽象和层叠
- 并查集(Union-Find)算法介绍(转)