POJ3274《Gold Balanced Lineup》方法:哈希

題目大意:最多有10w個牛,每個牛有最多30個特徵,比如特徵 10,可以表示爲二進制形式1010,現在要求出在一個連續區間,牛的每個特徵數目相等時,連續區間的最大長度。

解題思路:sum[i][j]表示從第1個到第i個牛,特徵j出現的總數,即要求sum[a][0] - sum[b][0] = sum[a][1] - sum[b][1] = sum[a][k-1] - sum[b][k-1]。式子可轉化爲sum[a][1] - sum[a][0] = sum[b][1] - sum[b][0],sum[a][2] - sum[a][0] = sum[b][2] - sum[b][0],因此可以令c[i][j] = sum[i][j] - sum[i][0],最終即要找到使c[a][]和c[b][]相等的區間最大長度。因爲題目數量級爲10w,因此不能兩兩之間相互比較,所以用哈希函數來將c[][]相等的數放入同一個地址中,具體的key是c[][1]*1+c[][2]*2...的和,prime取100003。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章