题目链接:

http://poj.org/problem?id=3349

题目大意:

雪花上有666个数形成环状,只有当从某个位置为起点,按顺时针或逆时针,能完全和另一个雪花相同时,判断为有两个相同的雪花。现有nnn片雪花,判断是否存在两片相同的雪花。
数据范围:n≤105n \leq 10^5n≤105

题目分析:

1.首先这个题目是个天坑,10510^5105很容易让人想到用map来实现Hash,方便又快捷,然而,本题对单纯的HashHashHash很不友好,数据有意在卡你,基本过不了。
2.其次10510^5105看似可以O(nlogn)O(nlogn)O(nlogn),然而本题卡常数,mapmapmap必不可能过。
3.然后你就想到用链表来做HashHashHash,对HashHashHash值相同的数据循环判断一次对吧?非常遗憾,看似10510^5105随便过,连lognlognlogn都没了,然而卡了你的常数。而且要注意你数据的离散程度,否则链表的效率可能还不如mapmapmap。
4.最坑的地方来了:一定要注意在做HashHashHash函数的时候,千万不能做乘法运算,对于雪花上的数(x≤106x \leq 10^6x≤106),乘法实在太慢了。
5.然后一个很坑的地方是,这个题不能用最小表示法,因为没有必要,且对于这种卡常数的题很容易挂掉。
6.最后就是要注意一下HashHashHash值相同的时候的判断了,由于每片雪花的数字个数是一样的,所以我们可以把其中一个雪花固定从000号位开始,枚举另一个雪花的起点就可以了。

正解代码:

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <cstdlib>using namespace std;
typedef long long ll;
const ll maxn=1000010;
ll n,tot=0,mod=999983;
ll snow[maxn][10],head[maxn],next[maxn];
ll Hash(ll (&A)[10])
{ll sum=1;for(ll i=0;i<6;i++)sum=(sum+A[i])%mod;return sum%mod;
}
bool thesame(ll (&A)[10],ll (&B)[10])
{for(ll i=0;i<6;i++){bool flag=false;for(ll j=0;j<6;j++){ll pos1=j,pos2=(i+j)%6;if(A[pos1]!=B[pos2]){flag=true;break;}}if(!flag)return true;}for(ll i=0;i<6;i++){bool flag=false;for(ll j=0;j<6;j++){ll pos1=j,pos2=(5-i-j+6)%6;if(A[pos1]!=B[pos2]){flag=true;break;}}if(!flag)return true;}return false;
}
bool insert(ll (&A)[10])
{ll weight=Hash(A);for(ll i=head[weight];i!=0;i=next[i])if(thesame(snow[i],A))return true;++tot;for(ll i=0;i<6;i++)snow[tot][i]=A[i];next[tot]=head[weight];head[weight]=tot;return false;
}
int main()
{scanf("%lld",&n);for(ll i=1;i<=n;i++){ll temp[10];for(ll j=0;j<6;j++)scanf("%lld",&temp[j]);if(insert(temp)){printf("Twin snowflakes found.");return 0;}}printf("No two snowflakes are alike.");return 0;
}

.Snowflake Snow Snowflakes——解题报告相关推荐

  1. Snowflake Snow Snowflakes

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

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

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

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

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

  4. Snowflake Snow Snowflakes(hash)

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

  5. POJ 3349 Snowflake Snow Snowflakes

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

  6. UVa 3349 Snowflake Snow Snowflakes(Hash)

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

  7. POJ3349 Snowflake Snow Snowflakes(哈希表)

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

  8. 【POJ3349】Snowflake Snow Snowflakes(哈希表判重,维护一个集合)

    problem 有n片雪花,每片有6个脚,每个脚有一个长度. 两片雪花是一样的当且仅当每个脚的长度顺序都一样(顺逆时针和开始位置不管) 求n片雪花中是否有一样的雪花. solution 维护一个哈希表 ...

  9. POJ3349 Snowflake Snow Snowflakes(hash)

    题意: 雪花有六条棱,每条棱对应一个数,要求在一组雪花中看能否寻找到所有棱对应相同的雪花(棱有顺序要求). 要点: 刚自学了一下hash,这题刚上手有点思路但自己实在也写不出来,看了网上的代码觉得还是 ...

最新文章

  1. dubbo相关的知识点总结
  2. html-webpack-plugin插件 根据模板生成多页面
  3. 【Tools】Ubuntu中vscode安装和使用
  4. 如何做好工程监理控制工作?
  5. PyCharm+Python3转换xls文件为xlsx文件格式
  6. atitit.Atitit. Gui控件and面板-----服务端控件 java struts的实现最佳实践
  7. 【廖雪峰python基础】【切片】课后作业
  8. SOME/IP报文格式-Payload
  9. python:实现峰值信噪比算法(附完整源码)
  10. 使用ID3算法实现决策树
  11. 用java 把字符串写进文本,Java将字符串写入文本文件代码示例
  12. 大一上学期C语言不熟知识点学习总结
  13. Windows版微信3.3.0内测版更新啦,亲测可刷朋友圈(附内测版)
  14. firewalld防火墙(二)实验案例:ip地址伪装,端口转发
  15. 学习计算机软件技术感想,信息技术学习心得体会
  16. mybatis的example
  17. 爬了1000张清纯妹子私房照,我流鼻血了...
  18. 【附源码】计算机毕业设计java智慧校园防疫管理平台设计与实现
  19. Milking Cows UASCO
  20. [附源码]计算机毕业设计4S店汽车售后服务管理系统Springboot程序

热门文章

  1. PDPS软件:导出Web浏览器文件功能及其操作方法
  2. Java处理JSON数据返回到前端的反斜杠
  3. 优化方法总结(BGD,SGD,Momentum,AdaGrad,RMSProp,Adam)
  4. VSCode安装教程【Windows系统】
  5. [YOLO专题-11]:YOLO V5 - ultralytics/train基于自定义图片数据集重新训练网络, 完成自己的目标检测
  6. uo和o的区别和用法_拼音o与uo如何区别使用
  7. 数模学习第三天--微分方程(传染病模型)
  8. 运行数据区③---方法区
  9. 又是一年冬至,最喜欢吃冬至茧了
  10. 「项目管理」甘特图制定项目计划的方法