hdu 5358(尺取法)

解题思路:这题可以利用尺取法,不过需要两个指针。如果采用一个指针,会出现这种情况,由于是取对数,所以中间可能会有很多log2S(i,j)的值相等,如果只有一个指针,会使得一些区间没有被算进去。比如0,0,1,1,0这种情况。

正解:

1、首先把它展开。发现没啥用。

2、然后发现S(i,j)最大就是10的十次方。然后一旦log之后,最大就是34貌似。就枚举所有的log值,算出后面乘以多少。这里可以用一种全新的二分姿势。

枚举左端点。好了,现在左端点i固定了。比如从log[S[i,l] ] + 1经过log之后得到k,log[S[i,l+1] ]+ 1 得到的也是k……一直到log[S[i,r-1] ]+1 得到的才是k,然后log[S[i,r] ] + 1 得到的是k+1了。区间是前闭后开的。那么这一段的i和j的总和就是((i + l) + (i+l+1) +  …… (i + r - 1) )那么一共有(r - l )个i+ 等差数列求和公式(a1+an) * n /2   等比数列求和公式:a1 * (1-q^n)/(1-q)


参考博客:http://www.myexception.cn/ai/1985602.html

http://blog.csdn.net/zjck1995/article/details/47321881


你可能感兴趣的:(枚举)