HDU 5358 First One( 2015 Multi-University Training Contest 6)




題意:給你一串序列。求出序列中所有的

i=1nj=in(log2S(i,j)+1)×(i+j)



題解:

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+(l+r-1)*(r-l)/2 【等差數列求和公式(a1+an) * n /2   等比數列求和公式:a1 * (1-q^n)/(1-q)】




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章