题目: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相关推荐

  1. POJ 3349 Snowflake Snow Snowflakes

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

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

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

  3. POJ 3349 Snowflake Snow Snowflakes hash

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

  4. UVa 3349 Snowflake Snow Snowflakes(Hash)

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

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

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

  6. Snowflake Snow Snowflakes(哈希表的应用)

    Snowflake Snow Snowflakes Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 27312   Accep ...

  7. Snowflake Snow Snowflakes

    文章目录 Snowflake Snow Snowflakes Snowflake Snow Snowflakes 题意: 给定一个n个六边形雪花,判定是否存在相同的 分析: 链表hash hash 值 ...

  8. Snowflake Snow Snowflakes(hash)

    F - Snowflake Snow Snowflakes Time Limit:4000MS     Memory Limit:65536KB     64bit IO Format:%I64d & ...

  9. POJ3349 Snowflake Snow Snowflakes(哈希表)

    题目链接http://poj.org/problem?id=3349 题意是说,有n片雪花,每片雪花都是有6个角,给出每片雪花每个角的长度,问里面有没有一样的雪花(给出数据的顺序是没有确定的). 虽然 ...

最新文章

  1. Vue轻松入门,一起学起来!
  2. 神策数据林美天于大数据与人工智能分享沙龙分享
  3. 机器学习(1.机器学习概述、数据集的组成以及机器学习的特征工程)
  4. H3C 基于IP的限速
  5. 【Numpy学习记录】np.cov详解
  6. Sybase常见问题
  7. 【JSON】FastJson 打印输格式化输出
  8. HTML5中Audio使用踩坑汇总
  9. 电脑芯片和服务器芯片,王思聪的服务器和我们的电脑有什么区别?
  10. bufferedimage设置位深度_深度解读超级推荐自定义推广,快速上手最新推广利器!...
  11. Zepto.js 使用手册
  12. js 动态生成表格案例
  13. matlab平稳性检验实例
  14. 机器学习及其Matlab实现——从基础到实践
  15. Enhancement spot 的实现
  16. switch语句练习题
  17. Python与Qt UI的图形界面编程(三)
  18. Linux 学习资料
  19. 第九周项目六 三色球问题
  20. IIS 6.0 支持Php

热门文章

  1. 系统架构设计——DDD设计框架基本学习
  2. 节日EDM系列:圣诞节如何进行EDM数据营销
  3. javaScript 生成随机字母 随机数字的5种方法
  4. 开发一个app需要多少钱
  5. python使用selenium + PhantomJs搭建的简单漫画爬虫工具
  6. 报错:Expected singleton
  7. html网页字体出现模糊,浏览器打开网页字体模糊问题的解决方法
  8. LeetCode 322. 零钱兑换***
  9. locust快速入门
  10. MATLAB数字水印设计