POJ3274《Gold Balanced Lineup》方法:哈希

来源:互联网 发布:上海黄浦seo 编辑:程序博客网 时间:2024/05/15 07:07

题目大意:最多有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。



原创粉丝点击