poj 3274 Gold Balanced Lineup
这两天做了些hash的题目,这道题感觉挺有技巧,拿来说说。
首先是题意,就是有好多cow,然后每个cow有些属性,比如说某个cow给你个数字6,属性长度K设定为3的话,则该cow的属性列表就是1 1 0,若属性长度K设定为4的话,属性列表就变为0 1 1 0。题目就是求最长连续的段,满足段里的每个属性出现的次数一样多。下面看看具体的做法。
数 二进制 sum 特征值
7 1 1 1 1 1 1 0 0 0
6 1 1 0 2 2 1 1 1 0
7 1 1 1 3 3 2 1 1 0
2 0 1 0 3 4 2 1 2 0
1 0 0 1 3 4 3 0 1 0
4 1 0 0 4 4 3 1 1 0
2 0 1 0 4 5 3 1 2 0
这样的话,题目就改成就求两个特征值相同的数,他们相差的最长距离就是答案,至于为什么会这么求,可以看到,每个数的特征值就是该数最小的基础数列,从这个数列可以通过给每位同时加一得到sum值。
该题的注意事项是,对于不同的K值,特征值的求法有些不同,如对于数字3,对应的二进制位1 1。当K等于3时,特征值为0 1 1,当K为2时,特征值就为0 0。这是很容易出错的地方。hash,和打表是不是有些像呢。

浙公网安备 33010602011771号