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,和打表是不是有些像呢。

 

posted @ 2012-06-08 09:36  vpanda  阅读(138)  评论(0)    收藏  举报