http://poj.org/problem?id=3274 hash
题意:
给你n和m,n表示n个数,m表示允许m个性质平衡。
下面n个数,这n个数对应的二进制数那一位为1的话,说明有该性质,现在找连续的一串数,是他们具有的只有m个性质的都每个性质被相同的人具有。
比如 1 2 4 7 3个性质都被2个人具有过。
现在要使这串数尽可能的长。
考思想
首先肯定只想到行上求sum ,因为见过这种连续问题用求和变成离散度,但是还不够,此题有一个比较特殊的性质,就是要找的答案是i行到j行,要平衡,就是都相等。
怎么转化平衡这个性质就成了难点。
通过列。既然平衡,那么就是不同行只是高度的不同,但是方差是相同的。就是可以看成波动相同,把他们转化到同一波动不久可以了。
所以就可以转化列的思路来。
列的那个思路很难想到;
然后再用hash处理 ,判断哪些行相同,因为要取最长,所以判相等只用找最长的,所以问题转化成了 o(n)的复杂度。
不过这道题还有trick
这道题数据比较水不过有很多地方值得思考
一个地方时
小心输出为零:
1 5
3
这组输出为0,而
1 2
3
输出1.
这种情况比较难处理。
二个地方是
还有就是最小值的边界的问题,如果ans没有在solve 里面找到值
的话那么ans应该怎么处理这个地方是很容易错的。