POJ 3349 Snowflake Snow Snowflakes(哈希表)
题意:判断有没有两朵相同的雪花。每朵雪花有六瓣,比较花瓣长度的方法看是否是一样的,如果对应的arms有相同的长度说明是一样的。给出n朵,只要有两朵是一样的就输出有Twin snowflakes found.,如果任何两个都是不一样的输出No two snowflakes are alike。n=100,000。
思路:最简单的就是枚举每两片雪花,判断他们是否相同。时间复杂度为O(n*n),显然效果不理想。有没有更好的算法呢?hash:每读进一片雪花,将雪花hash,判断hash表里是否有相同的hash值,有相同的hash值,从链表中一一取出并判断是否同构,是同构得出结果。然后将该雪花加入到表中,所有雪花读完也没有发现相同的,则得出结果。
代码如下:
- #include <stdio.h>
- #include <stdlib.h>
- #include <vector>
- #include <iostream>
- using namespace std;
- const int MAX_SIZE = 100005; //最大的雪花数
- const int MOD_VAL = 90001; //hash函数,取余的数
- int snow[MAX_SIZE][6]; //存储雪花信息
- vector<int> hash[MOD_VAL]; //hash表,表中存储的是snow数组的下标
- /*判断雪花a与雪花b是否同样
- *输入:两个雪花在snow数组的下标
- *输出:true or false
- */
- bool isSame(int a, int b)
- {
- for(int i=0;i<6;i++)
- {
- if(/*顺时针方向*/
- (snow[a][0] == snow[b][i] &&
- snow[a][1] == snow[b][(i+1)%6] &&
- snow[a][2] == snow[b][(i+2)%6] &&
- snow[a][3] == snow[b][(i+3)%6] &&
- snow[a][4] == snow[b][(i+4)%6] &&
- snow[a][5] == snow[b][(i+5)%6])
- ||
- /*逆时针方向*/
- (snow[a][0] == snow[b][i] &&
- snow[a][1] == snow[b][(i+5)%6] &&
- snow[a][2] == snow[b][(i+4)%6] &&
- snow[a][3] == snow[b][(i+3)%6] &&
- snow[a][4] == snow[b][(i+2)%6] &&
- snow[a][5] == snow[b][(i+1)%6])
- )
- return true;
- }
- return false;
- }
- int main()
- {
- /*处理输入*/
- int n;
- int i,j;
- scanf("%d", &n);
- for( i = 0; i < n; i++)
- {
- for( j = 0; j < 6; j++)
- {
- scanf("%d", &snow[i][j]);
- }
- }
- /*分别处理这n个雪花,判断有没两个雪花是相同的*/
- int sum, key;
- for(i = 0; i < n; i++)
- {
- /*求出雪花六个花瓣的和*/
- sum = 0;
- for( j = 0; j < 6; j++)
- {
- sum += snow[i][j];
- }
- key = sum % MOD_VAL; //求出key
- /*判断在hash表中hash[key]存储的雪花是否与雪花i相同*/
- for(vector<int>::size_type j = 0; j < hash[key].size(); j++)
- {
- /*若相同,则直接输出,并结束程序*/
- if(isSame(hash[key][j], i))
- {
- printf("%s/n", "Twin snowflakes found.");
- exit(0);
- }
- }
- /*若key相同的雪花没有一个与雪花i相同*/
- hash[key].push_back(i);
- }
- /*若都不相同*/
- printf("%s/n", "No two snowflakes are alike.");
- return 0;
- }
POJ 3349 Snowflake Snow Snowflakes(哈希表)的更多相关文章
- 哈希—— POJ 3349 Snowflake Snow Snowflakes
相应POJ题目:点击打开链接 Snowflake Snow Snowflakes Time Limit: 4000MS Memory Limit: 65536K Total Submissions ...
- POJ 3349 Snowflake Snow Snowflakes(简单哈希)
Snowflake Snow Snowflakes Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 39324 Accep ...
- poj 3349:Snowflake Snow Snowflakes(哈希查找,求和取余法+拉链法)
Snowflake Snow Snowflakes Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 30529 Accep ...
- [ACM] POJ 3349 Snowflake Snow Snowflakes(哈希查找,链式解决冲突)
Snowflake Snow Snowflakes Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 30512 Accep ...
- POJ 3349 Snowflake Snow Snowflakes
Snowflake Snow Snowflakes Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 27598 Accepted: ...
- POJ 3349 Snowflake Snow Snowflakes (Hash)
Snowflake Snow Snowflakes Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 48646 Accep ...
- POJ 3349 Snowflake Snow Snowflakes (哈希表)
题意:每片雪花有六瓣,给出n片雪花,六瓣花瓣的长度按顺时针或逆时针给出,判断其中有没有相同的雪花(六瓣花瓣的长度相同) 思路:如果直接遍历会超时,我试过.这里要用哈希表,哈希表的关键码key用六瓣花瓣 ...
- POJ - 3349 Snowflake Snow Snowflakes (哈希)
题意:给定n(0 < n ≤ 100000)个雪花,每个雪花有6个花瓣(花瓣具有一定的长度),问是否存在两个相同的雪花.若两个雪花以某个花瓣为起点顺时针或逆时针各花瓣长度依次相同,则认为两花瓣相 ...
- poj3349 Snowflake Snow Snowflakes —— 哈希表
题目链接:http://poj.org/problem?id=3349 题意:雪花有6个瓣,有n个雪花,输入每个雪花的瓣长,判断是否有一模一样的雪花(通过旋转或翻转最终一样,即瓣长对应相等).如果前面 ...
随机推荐
- Sqlserver------SQLServer2008R2中新增用户并设定表的访问权限
在进行项目对接时,有时候处于系统安全性考虑,我们需要设置数据库的访问权限,这个时候,我们可以新增一个用户,然后设定用户的访问权限,具体步骤如下: 1, 新建登录对象 2, 点击用户映射 3, 操 ...
- EasyUI分页(前台分页和后台分页)
整理一下以前的总结: 分页包括前台分页和后台分页两种,针对数据量比较小的,比如说单位,角色等,可以使用前台分页,而针对日志文件这些,需要后台分页. 先说说前台分页吧: function pagerFi ...
- RecyclerView 必知必会(转)
[腾讯Bugly干货分享]RecyclerView 必知必会 本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:http://mp.weixin.qq.com ...
- resin 4.0 项目的配置
前一篇我们了解了resin中配置数据源,依照不同项目的要求我们进行数据源的配置,如多个项目共享多个数据源,一个项目配置多个数据源,以下我们来看看项目的部署方式: 1.在一个host(虚拟主机)下配置一 ...
- jQuery动态加载JS以减少服务器压力
如果您要创建一个web2.0的应用程序,那么你的网页会包括大量的JavaScript文件,这些可能会拖慢您的网页.因此,动态加载JavaScript代码到您的网页是一个好主意,即只有当实用他们的时候加 ...
- 关于IIS上Yii2的Url路由美化
Yii2默认的路由是酱紫的 http://.../admin/web/index.php?r=site/login 心中理想的美化Url应该这样 http://.../admin/web/site/ ...
- SpringMVC基于代码的配置方式(零配置,无web.xml)
基于配置文件的web项目维护起来可能会更方便,可是有时候我们会有一些特殊的需求,比方防止客户胡乱更改配置,这时候我们须要给配置隐藏到代码中. 1.创建一个动态web项目(无需web.xml) 2.右键 ...
- 素数定理 nefu 117
素数定理: 随着x的增长,P(x) ≍x/ln(x) ,P(x)表示(1,x)内的素数的个数. 这个定理,说明在1-x中,当x大到一定程度时,素数分布的概率为ln(x) 竟然还有一道题目. 素数个数的 ...
- ORACLE client 11g r2 客户端开发环境配置
一.安装ORACLE客户端,这里不做说明.需要注意的是,客户端解压位置应该在磁盘根目录下. 如果放在带中文字或者空格的文件名的路径下出了问题,可以放到磁盘根目录在安装.应该就会没有问题. 另外,一般安 ...
- WCF基础之承载服务和生成客户端
wcf的承载有三种iis.was和自承载,它们如何承载园子里有很多,就不多赘述. 自iis7以后iis支持http和非http的协议,使用iis承载服务与其他两种承载相比,我觉的最明显的是was和自承 ...