比较好的思路题还有小trik,hash的比较好的应用

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应该怎么处理这个地方是很容易错的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值