首先声明代码并没有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."); } } }