题意:每片雪花有六瓣,给出n片雪花,六瓣花瓣的长度按顺时针或逆时针给出,判断其中有没有相同的雪花(六瓣花瓣的长度相同)

思路:如果直接遍历会超时,我试过。这里要用哈希表,哈希表的关键码key用六瓣花瓣的长度的和取余一个数得到,表中为雪花的存储位置address(即在snowflakes数组中的位置)

代码:

  1. #include<iostream>
  2. #include<vector>
  3. using namespace std;
  4. const int maxn=100000+100;//雪花最多数目
  5. const int mo=98765;//哈希取余的数
  6. int snowflakes[maxn][6];//存储雪花信息
  7. vector<int>hash[mo];//哈希表
  8.  
  9. bool issame(int a,int b)
  10. {
  11. for(int j=0;j<6;j++)
  12. {
  13. if(/*顺时针方向*/
  14. (snowflakes[a][0] == snowflakes[b][j] &&
  15. snowflakes[a][1] == snowflakes[b][(j+1)%6] &&
  16. snowflakes[a][2] == snowflakes[b][(j+2)%6] &&
  17. snowflakes[a][3] == snowflakes[b][(j+3)%6] &&
  18. snowflakes[a][4] == snowflakes[b][(j+4)%6] &&
  19. snowflakes[a][5] == snowflakes[b][(j+5)%6])
  20.  
  21. ||
  22. /*逆时针方向*/
  23. (snowflakes[a][0] == snowflakes[b][j] &&
  24. snowflakes[a][1] == snowflakes[b][(j+5)%6] &&
  25. snowflakes[a][2] == snowflakes[b][(j+4)%6] &&
  26. snowflakes[a][3] == snowflakes[b][(j+3)%6] &&
  27. snowflakes[a][4] == snowflakes[b][(j+2)%6] &&
  28. snowflakes[a][5] == snowflakes[b][(j+1)%6])
  29. )
  30. return true;
  31. }
  32. return false;
  33. }
  34. int main()
  35. {
  36. int n;
  37. bool exist=false;
  38. while(scanf("%d",&n)!=EOF)
  39. {
  40. int i,j,k;
  41. for(i=0;i<n;i++)
  42. for(j=0;j<6;j++)
  43. scanf("%d",&snowflakes[i][j]);
  44. int sum,key;
  45. for(i=0;i<n;i++)
  46. {
  47. sum=0;
  48. for(j=0;j<6;j++)
  49. sum+=snowflakes[i][j];
  50. key=sum%mo;//作为哈希表的key
  51. vector<int>::iterator it;
  52. for(it=hash[key].begin();it!=hash[key].end();it++)//遍历哈希表中key相同的雪花
  53. if(issame(*it,i))
  54. {
  55. exist=true;
  56. break;
  57. }
  58. hash[key].push_back(i);
  59. }
  60. if(exist)
  61. printf("Twin snowflakes found.\n");
  62. else
  63. printf("No two snowflakes are alike.\n");
  64. }
  65. return 0;
  66. }

POJ 3349 Snowflake Snow Snowflakes (哈希表)的更多相关文章

  1. 哈希—— POJ 3349 Snowflake Snow Snowflakes

    相应POJ题目:点击打开链接 Snowflake Snow Snowflakes Time Limit: 4000MS   Memory Limit: 65536K Total Submissions ...

  2. POJ 3349 Snowflake Snow Snowflakes(简单哈希)

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

  3. poj 3349:Snowflake Snow Snowflakes(哈希查找,求和取余法+拉链法)

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

  4. [ACM] POJ 3349 Snowflake Snow Snowflakes(哈希查找,链式解决冲突)

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

  5. POJ 3349 Snowflake Snow Snowflakes

    Snowflake Snow Snowflakes Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 27598 Accepted: ...

  6. POJ 3349 Snowflake Snow Snowflakes (Hash)

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

  7. POJ - 3349 Snowflake Snow Snowflakes (哈希)

    题意:给定n(0 < n ≤ 100000)个雪花,每个雪花有6个花瓣(花瓣具有一定的长度),问是否存在两个相同的雪花.若两个雪花以某个花瓣为起点顺时针或逆时针各花瓣长度依次相同,则认为两花瓣相 ...

  8. poj3349 Snowflake Snow Snowflakes —— 哈希表

    题目链接:http://poj.org/problem?id=3349 题意:雪花有6个瓣,有n个雪花,输入每个雪花的瓣长,判断是否有一模一样的雪花(通过旋转或翻转最终一样,即瓣长对应相等).如果前面 ...

  9. POJ 3349 Snowflake Snow Snowflakes(哈希表)

    题意:判断有没有两朵相同的雪花.每朵雪花有六瓣,比较花瓣长度的方法看是否是一样的,如果对应的arms有相同的长度说明是一样的.给出n朵,只要有两朵是一样的就输出有Twin snowflakes fou ...

随机推荐

  1. 《Lucene in Action 第二版》第4章节 学习总结 -- Lucene中的分析

    通过第四章的学习,可以了解lucene的分析过程是怎样的,并且可以学会如何使用lucene内置分析器,以及自定义分析器.下面是具体总结 1. 分析(Analysis)是什么? 在lucene中,分析就 ...

  2. 谨慎使用ArrayList中的subList方法

    转自:https://www.toutiao.com/a6705958780460335619/?tt_from=weixin&utm_campaign=client_share&wx ...

  3. SharePoint 2013的100个新特性 免费电子书下载

    简介:这本电子书对SharePoint 2013的100个新特性和改进的功能提供了一个简短的说明,这些功能分为以下几类: 1. SharePoint 2013内容管理 2. SharePoint 20 ...

  4. html5小趣味知识点系列(一)contentEditable

    在这里纠正一下某些书籍说 这个修改后的文字内容是无法保存的 的错误必须发送到服务器进行保存才可以(因为我可以保存到内容)看代码吧  也许我理解的不对 <!DOCTYPE html> < ...

  5. app 之间发送文件 ios

    本文转载至 http://www.51094.com/?p=212   第一种: 发送一个正常的  pdf 文件,只要是能读取pdf 的都能得到响应 -(IBAction)openDocumentIn ...

  6. 基于SqlDependency的Asp.net数据缓存

    首先,确保目标数据库的is_broker_enabled已经enabled. SELECT name, is_broker_enabled FROM sys.databases 如果不是enabled ...

  7. elasticsearch从入门到出门-01windows上安装使用

    elasticsearch 1.安装JDK,至少1.8.0_73以上版本,java -version2.下载和解压缩Elasticsearch安装包,目录结构3.启动Elasticsearch:bin ...

  8. jsp中嵌入的java代码执行对html的影响方式

    1 直接输出html标签嵌入到html中 <body> <h1>显示当前时间和日期</h1> <% Date date = new Date(); out.p ...

  9. 【python】-- json & pickle、xml、requests、hashlib、shelve、shutil、configparser、subprocess

    json & pickle Python中用于序列化的两个模块 json     用于[字符串]和 [python基本数据类型] 间进行转换 pickle   用于[python特有的类型] ...

  10. 我的Android进阶之旅------>Android疯狂连连看游戏的实现之实现游戏逻辑(五)

    在上一篇<我的Android进阶之旅------>Android疯狂连连看游戏的实现之加载界面图片和实现游戏Activity(四)>中提到的两个类: GameConf:负责管理游戏的 ...