首先声明代码并没有AC,内存超了

但我对此无能为力,有没有哪位大神好心教一下怎么写

哈希,然后比较花瓣数组,这些应该都没问题才对。。唉。。

贴MLE代码

  1. import java.util.*;
  2. public class POJ3349 {
  3.  
  4. static int N = 1200007;
  5. public static class HashNode{
  6. int[] num=null;
  7. HashNode next = null;
  8. }
  9.  
  10. // hashlist[i]存储hash值为i的链表
  11. static HashNode[] hashlist = new HashNode[1200010];
  12.  
  13. // 计算hash值
  14. static int hashValue(int[] num){
  15. int sum = 0;
  16. for(int i=0;i<num.length;i++){
  17. sum += num[i];
  18. }
  19. return sum % N;
  20. }
  21.  
  22. // 比较两种雪花花瓣,每片花瓣都一样才算一样
  23. static boolean cmp(int[] a,int[] b){
  24. if(a.length != b.length)
  25. return false;
  26. int len = a.length;
  27. for(int i=0;i<len;i++){
  28. if(a[i] != b[i]){
  29. return false;
  30. }
  31. }
  32. return true;
  33. }
  34.  
  35. // 根据数组hash值插入hashlist
  36. static void insertHash(int h,int[] num){
  37. HashNode hn = new HashNode();
  38. hn.num = new int[6];
  39. for(int i=0;i<hn.num.length;i++){
  40. hn.num[i]=num[i];
  41. }
  42. hn.next=hashlist[h];
  43. hashlist[h]=hn;
  44. }
  45.  
  46. // 找得到返回真
  47. // 找不到插入hashlist之后返回假
  48. static boolean searchHash(int h,int[] num){
  49. HashNode hn = hashlist[h];
  50. while (hn != null){
  51. if(cmp(hn.num,num)){
  52. return true;
  53. }
  54. hn = hn.next;
  55. }
  56. insertHash(h,num);
  57. return false;
  58. }
  59.  
  60. public static void main(String[] args) throws Exception{
  61. Scanner sc = new Scanner(System.in);
  62. int n = sc.nextInt();
  63. // 顺时针数组,放输入数组{0,1,2,3,4,5,0,1,2,3,4,5}位置上的元素
  64. int[] clockwise = new int[12];
  65. // 逆时针数组,放输入数组{5,4,3,2,1,0,5,4,3,2,1,0}位置上的元素
  66. int[] anticlockwise = new int[12];
  67. boolean twin = false;
  68. // 输入数组
  69. int[] num = new int[6];
  70. // 枚举顺逆时针用的临时数组
  71. int[] temp = new int[6];
  72. while (n-- > 0){
  73. for(int i=0;i<num.length;i++){
  74. num[i]=sc.nextInt();
  75. }
  76. // 已经找到一样的就停止计算,让输入跑跑完
  77. if(twin)
  78. continue;
  79. // 计算顺时针数组
  80. for(int i=0;i<6;i++){
  81. clockwise[i]=clockwise[i+6]=num[i];
  82. }
  83. // 计算逆时针数组
  84. for(int i=0;i<6;i++){
  85. anticlockwise[i]=anticlockwise[i+6]=num[5-i];
  86. }
  87. // 按所有顺逆时针顺序枚举雪花花瓣,看是否存在相同花瓣
  88. int h = hashValue(num);
  89.  
  90. for(int i=0;i<6;i++){
  91. //枚举所有顺时针顺序
  92. for(int j=0;j<6;j++){
  93. temp[j]=clockwise[j+i];
  94. }
  95. if(searchHash(h,temp)){
  96. twin=true;
  97. break;
  98. }
  99. //枚举所有逆时针顺序
  100. for(int j=0;j<6;j++){
  101. temp[j]=anticlockwise[j+i];
  102. }
  103. if(searchHash(h,temp)){
  104. twin=true;
  105. break;
  106. }
  107. }
  108. }
  109.  
  110. if(twin){
  111. System.out.println("Twin snowflakes found.");
  112. }else {
  113. System.out.println("No two snowflakes are alike.");
  114. }
  115.  
  116. }
  117.  
  118. }

  

POJ3349 Snowflake Snow Snowflakes (JAVA)的更多相关文章

  1. [poj3349]Snowflake Snow Snowflakes(hash)

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

  2. POJ--3349 Snowflake Snow Snowflakes(数字hash)

    链接:Snowflake Snow Snowflakes 判断所有的雪花里面有没有相同的 每次把雪花每个角的值进行相加和相乘 之后hash #include<iostream> #incl ...

  3. poj3349 Snowflake Snow Snowflakes【HASH】

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

  4. POJ3349 Snowflake Snow Snowflakes (hash

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

  5. poj3349 Snowflake Snow Snowflakes

    吼哇! 关于开散列哈希: 哈希就是把xxx对应到一个数字的东西,可以理解成一个map<xxx, int>(是不是比喻反了) 我们要设计一个函数,这个函数要确保同一个东西能得到相同的函数值( ...

  6. poj3349 Snowflake Snow Snowflakes —— 哈希表

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

  7. POJ3349: Snowflake Snow Snowflakes(hash 表)

    考察hash表: 每一个雪花都有各自的6个arm值,如果两个雪花从相同或者不同位置开始顺时针数或者逆时针数可以匹配上,那么这两个雪花就是相等的. 我们采用hash的方法,这样每次查询用时为O(1),总 ...

  8. POJ3349 Snowflake Snow Snowflakes(哈希)

    题目链接. 分析: 哈希竟然能这么用.检查两片雪花是否相同不难,但如果是直接暴力,定会超时.所以要求哈希值相同时再检查. AC代码: #include <iostream> #includ ...

  9. POJ3349 Snowflake Snow Snowflakes 【哈希表】

    题目 很简单,给一堆6元组,可以从任意位置开始往任意方向读,问有没有两个相同的6元组 题解 hash表入门题 先把一个六元组的积 + 和取模作为hash值,然后查表即可 期望\(O(n)\) #inc ...

随机推荐

  1. redis缓存分页思路

    传统分页一般分页做缓存都是直接查找出来,按页放到缓存里,但是这种缓存方式有很多缺点.如缓存不能及时更新,一旦数据有变化,所有的之前的分页缓存都失效了.比如像微博这样的场景,微博下面现在有一个顶次数的排 ...

  2. Openssl enc命令

    一.简介 enc - 对称加密例程,使用对称密钥对数据进行加解密,特点是速度快,能对大量数据进行处理.算法有流算法和分组加密算法,流算法是逐字节加,由于其容易被破译,现在已很少使用:分组加密算法是将数 ...

  3. Java泛型中的通配符

    Java泛型中的通配符可以直接定义泛型类型的参数.而不用把该函数定义成泛型函数. public class GenericsTest { public static void main(String[ ...

  4. Sprig 面试中 问及 DI,IOC, AOP

    面向切面编程,把散落在程序中的公共部分提取出来,做成切面类,这样的好处在于,代码的可重用,一旦涉及到该功能的需求发生变化,只要修改该代码就行,否则,你要到处修改,如果只要修改1.2处那还可以接受,万一 ...

  5. HDU 2159 FATE (二维背包)

    题意:中文题. 析:dp[i][j] 已经杀了 i 个怪兽,已经用了 j 体积,所能获得的最大经验值,这个和一维的差不多,只是加一维而已. 代码如下: #pragma comment(linker, ...

  6. Discuz核心函数的解析

    dz采用的是多入口的方式,在每个入口函数你能看到引用,启动核心类的语句(其余省略),如下: require './source/class/class_core.php'; C::app()-> ...

  7. Currying and Uncurrying Js

    //反科里化Function.prototype.uncurrying = function() { var _this = this; return function() { return Func ...

  8. 编写高质量代码改善C#程序的157个建议——建议93:构造方法应初始化主要属性和字段

    建议93:构造方法应初始化主要属性和字段 类型的属性应该在构造方法调用完毕前完成初始化工作.如果字段没有在初始化器中设置初始值,那么它就应该在构造方法中初始化. 类型一旦被实例化,那么它就应该被视为具 ...

  9. ERROR: from PIL import Image ImportError: No module named PIL

    ERROR: from PIL import Image ImportError: No module named PIL 到 http://www.pythonware.com/products/p ...

  10. 淘宝IP地址库

    淘宝官方ip地址库 http://ip.taobao.com/ 接口说明 1. 请求接口(GET): http://ip.taobao.com/service/getIpInfo.php?ip=[ip ...