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