poj3349 哈希查找

  求出六个雪花叶子的长度,然后取模。这个是我第一次写哈希,也不太会啊,所以就参考了一下别人的代码,我感觉他的代码写的好文艺啊。 挺不错的,我以后也要注意代码格式问题了。

 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <stdlib.h>
 4 #include <vector>
 5 #define  maxn 100005
 6 #define  mod_val 90001
 7 using namespace std;
 8 
 9 vector<int>hash[mod_val];
10 int snow[maxn][6];
11 
12 bool isSame(int a,int b)
13 {
14     int i,j;
15     for(i=0;i<6;++i)
16     {
17         if(
18             ( snow[a][0]==snow[b][i]&&
19               snow[a][1]==snow[b][(i+1)%6]&&
20               snow[a][2]==snow[b][(i+2)%6]&&
21               snow[a][3]==snow[b][(i+3)%6]&&
22               snow[a][4]==snow[b][(i+4)%6]&&
23               snow[a][5]==snow[b][(i+5)%6])
24             ||
25             ( snow[a][0]==snow[b][i]&&
26               snow[a][1]==snow[b][(i+5)%6]&&
27               snow[a][2]==snow[b][(i+4)%6]&&
28               snow[a][3]==snow[b][(i+3)%6]&&
29               snow[a][4]==snow[b][(i+2)%6]&&
30               snow[a][5]==snow[b][(i+1)%6])
31           )
32           return 1;
33     }
34     return 0;
35 }
36 
37 int main()
38 {
39     int n,i,j;
40     int key;
41     int sum;
42     scanf("%d",&n);
43     for(i=0;i<n;++i)
44         for(j=0;j<6;++j)
45             scanf("%d",&snow[i][j]);
46     
47     for(i=0;i<n;++i)
48     {
49         sum=0;
50         for(j=0;j<6;++j)
51             sum+=snow[i][j];
52 
53         key=sum % mod_val;
54 
55         for(vector<int>::size_type j=0 ; j < hash[key].size() ; ++j )
56         {
57             if(isSame(hash[key][j],i))
58             {
59                 printf("Twin snowflakes found.\n");
60                 exit(0);
61             }
62         }
63 
64         hash[key].push_back(i);
65     }
66     
67     printf("No two snowflakes are alike.\n");
68 
69     return 0;
70 }
原文地址:https://www.cnblogs.com/symons1992/p/3006472.html