POJ 3349.Snowflake Snow Snowflakes
题目:http://poj.org/problem?id=3349
AC代码(C++):
#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <vector>
#include <queue>
#include <math.h>
#include <string>
#include <string.h>
#include <bitset>#define INF 0xfffffff
#define MAXN 1200010
#define prime 1200007using namespace std;struct NODE{int num[6];int next;
};NODE node[MAXN];
int hash[MAXN];
int nodecnt;bool cmp(int* num1, int* num2){for(int i = 0; i < 6; i++){if(num1[i]!=num2[i])return false;}return true;
}int getHash(int* num){return (num[0]%prime + num[1]%prime + num[2]%prime + num[3]%prime + num[4]%prime + num[5])%prime;
}void insertHash(int* num, int key){for(int i = 0; i < 6; i++)node[nodecnt].num[i] = num[i];node[nodecnt].next = hash[key];hash[key] = nodecnt;nodecnt++;
}bool searchHash(int* num){int key = getHash(num);int next = hash[key];while(next!=-1){if(!cmp(num,node[next].num)){next = node[next].next;}else return true;}insertHash(num,key);return false;
}int main(){int n;cin>>n;bool flag = false;nodecnt = 0;for(int i = 0; i < MAXN; i++)hash[i] = -1;while(n--){int num[2][12];for(int i = 0; i < 6; i++){scanf("%d",&num[0][i]);num[0][i+6] = num[0][i];num[1][5-i] = num[0][i];num[1][5-i+6] = num[0][i];}if(flag)continue;for(int i = 0; i < 6; i++){if(searchHash(num[0]+i)||searchHash(num[1]+i)){flag = true;break;}}}if(flag)cout<<"Twin snowflakes found.";else cout<<"No two snowflakes are alike.";
}
总结: 数字哈希. 顺逆时针和顺序需要注意下, 还有就是这题时间很紧, 能优化的地方要优化下. 其实我这个代码还有待改善, 首先是时间太紧3719ms差点TLE, 其次如果输入1 1 1 1 1 2这样的雪花就会直接认为有相同, 因为在insert完顺时针i = 0的时候已经插入了1 1 1 1 1 2, 在search逆时针i = 1时直接搜到了刚才插入的1 1 1 1 1 2, 所以认为是相同的.
POJ 3349.Snowflake Snow Snowflakes相关推荐
- POJ 3349 Snowflake Snow Snowflakes
/* 哈希第一题啊..! 谢谢 http://www.cnblogs.com/Dario67/archive/2011/04/09/2010724.html 的博主 这题投机取巧了,判断是否相等 直接 ...
- ***POJ 3349 Snowflake Snow Snowflakes(哈希)
第一次学习哈希,基本模仿题解写的 思路:首先这题时间比较紧,所以只能用加法求余来构造哈希表,然后容易出现冲突,所以冲突之后还需要判断是否为同种. 并且雪花有顺逆时针,所以需要两种时针方向,每种时针方向 ...
- POJ 3349 Snowflake Snow Snowflakes hash
题意:每个雪花有六个角,每个角用一个数字表示.输入n个雪花,若存在两个雪花相等则输出Twin snowflakes found.否则输出No two snowflakes are alike. 题解: ...
- UVa 3349 Snowflake Snow Snowflakes(Hash)
http://poj.org/problem?id=3349 题意: 给出n片雪花留个角的长度,要求判断是否有一样的雪花. 思路: Hash表的应用. 首先将每个雪花所有角的总长计算出来,如果两片雪花 ...
- 【POJ No. 3349】 雪花 Snowflake Snow Snowflakes
[POJ No. 3349] 雪花 Snowflake Snow Snowflakes POJ 题目地址 [题意] 你可能听说过没有两片雪花是一样的,请编写一个程序来确定这是否是真的. 已知每片雪花6 ...
- Snowflake Snow Snowflakes(哈希表的应用)
Snowflake Snow Snowflakes Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 27312 Accep ...
- Snowflake Snow Snowflakes
文章目录 Snowflake Snow Snowflakes Snowflake Snow Snowflakes 题意: 给定一个n个六边形雪花,判定是否存在相同的 分析: 链表hash hash 值 ...
- Snowflake Snow Snowflakes(hash)
F - Snowflake Snow Snowflakes Time Limit:4000MS Memory Limit:65536KB 64bit IO Format:%I64d & ...
- POJ3349 Snowflake Snow Snowflakes(哈希表)
题目链接http://poj.org/problem?id=3349 题意是说,有n片雪花,每片雪花都是有6个角,给出每片雪花每个角的长度,问里面有没有一样的雪花(给出数据的顺序是没有确定的). 虽然 ...
最新文章
- Vue轻松入门,一起学起来!
- 神策数据林美天于大数据与人工智能分享沙龙分享
- 机器学习(1.机器学习概述、数据集的组成以及机器学习的特征工程)
- H3C 基于IP的限速
- 【Numpy学习记录】np.cov详解
- Sybase常见问题
- 【JSON】FastJson 打印输格式化输出
- HTML5中Audio使用踩坑汇总
- 电脑芯片和服务器芯片,王思聪的服务器和我们的电脑有什么区别?
- bufferedimage设置位深度_深度解读超级推荐自定义推广,快速上手最新推广利器!...
- Zepto.js 使用手册
- js 动态生成表格案例
- matlab平稳性检验实例
- 机器学习及其Matlab实现——从基础到实践
- Enhancement spot 的实现
- switch语句练习题
- Python与Qt UI的图形界面编程(三)
- Linux 学习资料
- 第九周项目六 三色球问题
- IIS 6.0 支持Php