poj解题报告——3349
来源:互联网 发布:武汉有单片机培训机构 编辑:程序博客网 时间:2024/04/28 05:51
2月1日第一题,也是我寒假第一题。
这题分类是用哈希表做,一开始我都不知道什么是哈希表,摸索了许久,参考了别人的代码,写下了这个。
题意:每个雪花都有六个分支,用六个整数代表,这六个整数是从任意一个分支开始,朝顺时针或逆时针方向遍历得到的。输入多个雪花,判断是否有形状一致的雪花存在。简单的数字哈希,每种雪花可以由多种数字组合表示。例如输入的是1 2 3 4 5 6,则2 3 4 5 6 1,3 4 5 6 1 2,……,6 5 4 3 2 1,5 4 3 2 1 6等都是相同形状的。因此可以在读入一个雪花的时候把这些情况全部放入哈希表中,如果某次插入的时候发生冲突,则说明存在重复的雪花,并且后面的不需要再处理。
代码如下
#include <stdio.h>
#define N 1200010
#define H 1200007
struct Node
{
int num[6];
int next;
};
struct Node node[N];
int cur;
int hashTable[H];
void initHash()
{
int i;
cur=0;
for(i=0;i<H;i++)
hashTable[i]=-1;
}
unsigned int getHash(int *num)
{
unsigned int hash=0;
int i;
for(i=0;i<6;i++)
{
hash+=num[i];
}
return hash%H;
}
int cmp(int *num1, int *num2)
{
int i;
for(i=0;i<6;i++)
{
if(num1[i]!=num2[i])
return 0;
}
return 1;
}
void insertHash(int *num,unsigned int h)
{
int i;
for(i=0; i<6;i++)
node[cur].num[i] = num[i];
node[cur].next=hashTable[h];
hashTable[h]=cur;
++cur;
}
int searchHash(int* num)
{
unsigned h=getHash(num);
int next=hashTable[h];
while(next!=-1)
{
if(cmp(num,node[next].num))
return 1;
next=node[next].next;
}
insertHash(num,h);
return 0;
}
void main()
{
int num[2][12];
int n,i;
int twin=0;
initHash();
scanf("%d",&n);
while(n--)
{
for(i=0;i<6;i++)
{
scanf("%d",&num[0][i]);
num[0][i+6]=num[0][i];
}
if(twin)
continue;
for(i=0;i<6;i++)
{
num[1][i+6]=num[1][i]=num[0][5-i];
}
for(i=0;i<6;i++)
{
if(searchHash(num[0]+i)||searchHash(num[1]+i))
{
twin=1;
break;
}
}
}
if(twin)
printf("Twin snowflakes found.\n");
else
printf("No two snowflakes are alike.\n");
}
- poj解题报告——3349
- POJ 3349 解题报告
- POJ 1088 滑雪——解题报告
- POJ 1047——解题报告
- poj解题报告——poj1006
- poj解题报告——1032
- poj解题报告——1061
- poj解题报告——1450
- poj解题报告——1002
- poj解题报告——2109
- poj解题报告——1218
- poj解题报告——1250
- poj解题报告——1012
- poj解题报告——3299
- poj解题报告——2209
- poj解题报告——2406
- poj解题报告——2242
- poj解题报告——1401
- 【详解】如何编写Linux下Nand Flash驱动
- POJ 1426 Find The Multiple (DFS)
- Java系列(十五)__Java常用类库(1)
- 【转载】Cookie/Session机制详解
- eclipse安装jbpm6插件完成hello world---的确可用
- poj解题报告——3349
- grep为何如此之快
- 01-Git简介和仓库创建
- 【转载】django web Cookie 和 Sessions 应用
- .NET开发者必备的工具箱
- HTML5+phonepag 开发安卓APP开发环境的框架搭建
- [Ubuntu] 14.04 关闭桌面
- 02-Git简单使用
- java中this关键字