Snowflake Snow Snowflakes--POJ 3349

1、解题思路:哈希表。

2、注意事项:哈希函数,利用冲突处理。

3、实现方法: 

1 #include<iostream>
2 #include<algorithm>
3  #define M 100001
4 using namespace std;
5
6 struct Node
7 {
8 bool key;
9 int len;
10 int next[10][7];
11 };
12 Node Arr[M];
13
14 int main()
15 {
16 int n,tmp[7];
17 int sum;
18 int flag=0;
19 cin>>n;
20 for(int i=0;i<n;i++)
21 {
22 sum=0;
23 for(int j=0;j<6;j++)
24 {
25 scanf("%d",&tmp[j]);
26 sum+=tmp[j];
27 }
28 sum=sum%M;
29 if(!flag)
30 {
31 if(Arr[sum].key==true)
32 {
33 sort(tmp,tmp+6);
34 int t=Arr[sum].len;
35 for(int k=0;k<t;k++)
36 {
37 sort(Arr[sum].next[k],Arr[sum].next[k]+6);
38 int p;
39 for(p=0;p<6;p++)
40 {
41 if(Arr[sum].next[k][p]==tmp[p])
42 continue;
43 else
44 break;
45 }
46 if(p==6)
47 {
48 flag=1;
49 break;
50 }
51 else
52 {
53 if(Arr[sum].len<10)
54 for(p=0;p<6;p++)
55 Arr[sum].next[Arr[sum].len][p]=tmp[p];
56 Arr[sum].len++;
57 }
58 }
59 }
60 else
61 {
62 Arr[sum].key=true;
63 for(int q=0;q<6;q++)
64 Arr[sum].next[Arr[sum].len][q]=tmp[q];
65 Arr[sum].len++;
66 }
67 }
68 }
69
70 if(flag)
71 cout<<"Twin snowflakes found."<<endl;
72 else
73 cout<<"No two snowflakes are alike."<<endl;
74 return 0;
75 }

 

posted @ 2010-07-21 21:25  勇泽  阅读(221)  评论(0编辑  收藏  举报