题目大意:每片雪花有 6 个角长度的值,对于不同的雪花而言,这些值可能被反转,并且开头的长度未必是一致的

例如 1 2 3 4 5 6和 4 3 2 1 6 5,虽然他们表面上不同,但是经过反转和偏移以后,就是相同的雪花。

在输入数据中如果有相同的雪花,则输出yes,否则输出no。

这个题目为什么适合用哈希表呢,个人觉得主要一个原因是数据不好排序,因为六片花瓣顺序被打乱了,如果数据不能有效的排序,自然就不能有效的检索。

但是这些数据虽然 却可以比较容易找到一个哈希函数,将 被打乱的相同数据 映射到同一个哈希值上。 然后在针对小规模的数据做检索,能很高的提高效率。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define mod 99983
using namespace std;
struct node
{node(): next(NULL){}int snow[6];struct node *next;
}hash[100001];
int a[6];
void add(int key)
{node *p=new node;for(int i=0;i<6;++i)p->snow[i]=a[i];p->next=hash[key].next;hash[key].next=p;
}
bool  find(int key)
{node *p=hash[key].next;while(p!=NULL){for(int i=0;i<6;++i)if((a[0]==p->snow[i]&&a[1]==p->snow[(i+1)%6]&&a[2]==p->snow[(i+2)%6]&&a[3]==p->snow[(i+3)%6]&&a[4]==p->snow[(i+4)%6]&&a[5]==p->snow[(i+5)%6])||a[0]==p->snow[i]&&a[1]==p->snow[(i+5)%6]&&a[2]==p->snow[(i+4)%6]&& a[3]==p->snow[(i+3)%6]&&a[4]==p->snow[(i+2)%6]&&a[5]==p->snow[(i+1)%6])return true;p=p->next;}return false;
}
int main()
{int n;//int key=0;还记得这天中午因为key的苦恼吗2017.11.23 13:31bool ok=false;cin>>n;memset(hash,NULL,sizeof(hash));for(int i=0;i<n;++i){int key=0;for(int j=0;j<6;++j){scanf("%d",&a[j]);//用cin会超时key+=a[j];}key%=mod;if(find(key))ok=true;elseadd(key);}if(ok)printf("Twin snowflakes found.\n");elseprintf("No two snowflakes are alike.\n");return 0;
}

poj 3349 雪花相关推荐

  1. POJ 3349.Snowflake Snow Snowflakes

    题目:http://poj.org/problem?id=3349 AC代码(C++): #include <iostream> #include <algorithm> #i ...

  2. 【算法竞赛进阶指南】POJ 3349 —— SnowflakeSnowSnowflakes

    Description 有N片雪花,每片雪花由六个角组成,每个角都有长度.第i片雪花六个角的长度从某个角开始顺时针依次记为ai1,ai2,-,ai6. 因为雪花的形状是封闭的环形,所以从任何一个角开始 ...

  3. ***POJ 3349 Snowflake Snow Snowflakes(哈希)

    第一次学习哈希,基本模仿题解写的 思路:首先这题时间比较紧,所以只能用加法求余来构造哈希表,然后容易出现冲突,所以冲突之后还需要判断是否为同种. 并且雪花有顺逆时针,所以需要两种时针方向,每种时针方向 ...

  4. POJ 3349 Snowflake Snow Snowflakes hash

    题意:每个雪花有六个角,每个角用一个数字表示.输入n个雪花,若存在两个雪花相等则输出Twin snowflakes found.否则输出No two snowflakes are alike. 题解: ...

  5. POJ 3349 Snowflake Snow Snowflakes

    /* 哈希第一题啊..! 谢谢 http://www.cnblogs.com/Dario67/archive/2011/04/09/2010724.html 的博主 这题投机取巧了,判断是否相等 直接 ...

  6. POJ3349 哈希算法

    问题分析 在n (n<100000)个雪花中判断是否存在两片完全相同的雪花,每片雪花有6个角,每个角的长度限制为1000000 雪花相等的条件为, 雪花6个角的长度按顺序相等(这个顺序即可以是顺 ...

  7. 东超科技于上市公司有关系_科技公司可以从有史以来最大的软件上市中学到什么...

    东超科技于上市公司有关系 Despite sharing a name with the slang term to imply that someone is "soft and frag ...

  8. 【POJ No. 3349】 雪花 Snowflake Snow Snowflakes

    [POJ No. 3349] 雪花 Snowflake Snow Snowflakes POJ 题目地址 [题意] 你可能听说过没有两片雪花是一样的,请编写一个程序来确定这是否是真的. 已知每片雪花6 ...

  9. UVa 3349 Snowflake Snow Snowflakes(Hash)

    http://poj.org/problem?id=3349 题意: 给出n片雪花留个角的长度,要求判断是否有一样的雪花. 思路: Hash表的应用. 首先将每个雪花所有角的总长计算出来,如果两片雪花 ...

最新文章

  1. VOLTE parameter in Attach Request/Accept message
  2. Python 代码性能优化技巧
  3. [笔记]极大极小过程的alpha-beta剪枝不可与记忆化搜索一起使用
  4. spike 序列matlab,SPKtool1.0.1 神经信号spike 分类及处理 工具包 matlab 238万源代码下载- www.pudn.com...
  5. DataList分页,保存CheckBox控件状态
  6. 信息学奥赛一本通 1319:【例6.1】排队接水 | 洛谷 P1223 排队接水
  7. 对象新增方法 object.is() object.assign()
  8. 绘图神器 —— Graphviz dot 语言介绍
  9. Atitit webdav的使用与配置总结attilax总结 目录 1. 支持的协议 2 1.1. http File unc 2 2. 应用场景 2 2.1. 远程文件管理实现功能 文件建立
  10. 各省简称 拼音 缩写_全国城市拼音 缩写
  11. linux---dns/yum安装软件/定时任务
  12. EXCEL常规格式数字转换为日期时间格式的方法
  13. microsoftstore连不上网_Microsoft Store登录不了怎么办 Microsoft Store登录不了解决方法...
  14. 在未提供官方驱动的Windows平板上安装Win10且完美驱动的解决方案
  15. Unity流水账8:MeshComponents
  16. 英雄联盟手游正式上线啦
  17. 微信 聊天服务器失败是怎么回事,微信语音转换文字失败是怎么回事 原因是什么...
  18. 作为面试官,如何考察工程师的软素质
  19. 开源ERP| Odoo系统如何实现企微扫码登录
  20. 2022-2028年中国餐饮服务行业发展现状分析及市场前景预测报告

热门文章

  1. 在64位Windows7上安装64位Oracle11g
  2. 不是我散漫了,是病了——书于平安夜
  3. [转贴]年薪一万/十万/百万的各样生活
  4. Linux/Android Kconfig Makefile defconfig 和 .config关系
  5. S3c2440A WINCE平台HIVE注册表+binfs的实现
  6. mtk Android 编译命令自定义--添加版本号
  7. python 下载网页文件_『如何用python把网页上的文本内容保存下来』python爬取网页内容教程...
  8. 搞定Go单元测试(三)—— 断言(testify)
  9. mysql根据时间戳查询指定日期内数据
  10. regex在.NET里判断输入信息的合法性