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

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

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

贴MLE代码

import java.util.*;
public class POJ3349 { static int N = 1200007;
public static class HashNode{
int[] num=null;
HashNode next = null;
} // hashlist[i]存储hash值为i的链表
static HashNode[] hashlist = new HashNode[1200010]; // 计算hash值
static int hashValue(int[] num){
int sum = 0;
for(int i=0;i<num.length;i++){
sum += num[i];
}
return sum % N;
} // 比较两种雪花花瓣,每片花瓣都一样才算一样
static boolean cmp(int[] a,int[] b){
if(a.length != b.length)
return false;
int len = a.length;
for(int i=0;i<len;i++){
if(a[i] != b[i]){
return false;
}
}
return true;
} // 根据数组hash值插入hashlist
static void insertHash(int h,int[] num){
HashNode hn = new HashNode();
hn.num = new int[6];
for(int i=0;i<hn.num.length;i++){
hn.num[i]=num[i];
}
hn.next=hashlist[h];
hashlist[h]=hn;
} // 找得到返回真
// 找不到插入hashlist之后返回假
static boolean searchHash(int h,int[] num){
HashNode hn = hashlist[h];
while (hn != null){
if(cmp(hn.num,num)){
return true;
}
hn = hn.next;
}
insertHash(h,num);
return false;
} public static void main(String[] args) throws Exception{
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
// 顺时针数组,放输入数组{0,1,2,3,4,5,0,1,2,3,4,5}位置上的元素
int[] clockwise = new int[12];
// 逆时针数组,放输入数组{5,4,3,2,1,0,5,4,3,2,1,0}位置上的元素
int[] anticlockwise = new int[12];
boolean twin = false;
// 输入数组
int[] num = new int[6];
// 枚举顺逆时针用的临时数组
int[] temp = new int[6];
while (n-- > 0){
for(int i=0;i<num.length;i++){
num[i]=sc.nextInt();
}
// 已经找到一样的就停止计算,让输入跑跑完
if(twin)
continue;
// 计算顺时针数组
for(int i=0;i<6;i++){
clockwise[i]=clockwise[i+6]=num[i];
}
// 计算逆时针数组
for(int i=0;i<6;i++){
anticlockwise[i]=anticlockwise[i+6]=num[5-i];
}
// 按所有顺逆时针顺序枚举雪花花瓣,看是否存在相同花瓣
int h = hashValue(num); for(int i=0;i<6;i++){
//枚举所有顺时针顺序
for(int j=0;j<6;j++){
temp[j]=clockwise[j+i];
}
if(searchHash(h,temp)){
twin=true;
break;
}
//枚举所有逆时针顺序
for(int j=0;j<6;j++){
temp[j]=anticlockwise[j+i];
}
if(searchHash(h,temp)){
twin=true;
break;
}
}
} if(twin){
System.out.println("Twin snowflakes found.");
}else {
System.out.println("No two snowflakes are alike.");
} } }

  

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. 关于新建XIB去关联控制器,报错- the view outlet was not set

    凡事必勤,切勿眼高手低.这是我对于自己惰性的又一次的自我认识与批评.以前遇见而又解决的问题,当时没有记录,以为都是小CASE,直到积累了广泛的问题和技能,遇见了相同的问题,而又忘记了,又一次认识到笔记 ...

  2. 获取网页上的所有QQ号码,并生成exel报表

    需要的jar如下: package jsoup.zr.com.utils; /** * * @author LF * */ public class Constant { /** * 网站链接地址ַ ...

  3. windows下的phpunit安装

    Windows Globally installing the PHAR involves the same procedure as manually installing Composer on ...

  4. C#根据URL生成签名

    代码: using System; using System.Collections.Generic; using System.Linq; using System.Security.Cryptog ...

  5. [SoapUI] 在Test Step 下加Script Assertion,用 messageExchange 获取当前步骤的response content

    //Get response content of the current request def response = messageExchange.getResponseContent() // ...

  6. CSS3 圆环状进度条

    HTML: <div class="wrap"> <div class="progress-radial progress-25"> & ...

  7. mac安装mysql及终端操作mysql与pycharm的数据库可视化

    一.Mac安装mysql 首先下载mysql,地址:https://dev.mysql.com/downloads/mysql/ 然后已知安装就好了,会出现让你记住密码的提示,然后就安装好了.... ...

  8. SSH整合案例

    1.Hibernate框架 Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernat ...

  9. 编写高质量代码改善C#程序的157个建议——建议142:总是提供有意义的命名

    建议142:总是提供有意义的命名 除非有特殊原型,否则永远不要为自己的代码提供无意义的命名. 害怕需要过长的命名才能提供足够的意义?不要怕,其实我们更介意的是在代码的时候出现一个iTemp. int ...

  10. ZOJ3705:Applications

    Recently, the ACM/ICPC team of Marjar University decided to choose some new members from freshmen to ...