《算法竞赛进阶指南》——HASH,字符串,trie总结
HASH 雪花雪花雪花 这个就是因为需要知道是否存在两个相同的,并且它们实际上是以环状存在,并且有正反两面,所以每个雪花,先求出它正反两面的最小表示法,然后对这个最小表示法hash存入数组,对数组进行排序,查看是否有相同的元素,若有则存在。 # include <cstdio> # include <cstring> # include <iostream> # include <algorithm> using namespace std ; const int N = 100010 ; int n ; int snows [ N ] [ 6 ] , idx [ N ] ; //snows储存所有的最小表示法,idx储存每个表示法的序号。 void get_min ( int * b ) //求最小表示法 { static int a [ 12 ] ; for ( int i = 0 ; i < 12 ; i ++ ) a [ i ] = b [ i % 6 ] ; int i = 0 , j = 1 , k ; while ( i < 6 && j < 6 ) { for ( k = 0 ; k < 6 && a [ i + k ] == a [ j + k ] ; k ++ ) ; if ( k == 6 ) break ; if ( a [ i + k ] > a [ j