1. 程式人生 > >【分塊打表】bzoj 3758 數數

【分塊打表】bzoj 3758 數數

inpu 綜合 前綴和 lan 不能 art -1 esc ref

【題目描述】

Description

神犇最近閑來無事,於是就思考哲學,研究數字之美。在神犇看來,如果一個數的各位能夠被分成兩個集合,而且這兩個集合裏的數的和相等,那麽這個數就是優美的(具體原因就只有神犇才知道了)。現在神犇在思考另一個問題,在區間[a,b]中有多少個數是優美的?這個問題對於神犇來說很簡單,相信對於你來說也不難。
Input

輸入只有一行,包含兩個整數a和b。
Output

輸出只有一行,包含一個整數,代表區間[a,b]中優美的數的個數。

Sample Input

1 11
Sample Output

1
HINT

1<=A<=B<=10^9

【思路】

  • 對於每個數x,可以log(x)復雜度內(二進制背包問題)求出這個數是不是完美數
  • 對於[a,b]內有多少個完美數,可以由前綴和sum[a]-sum[b-1]得出
  • 考慮到a=1,b=1e9時不能在線算,所以要打表預處理
  • 考慮到打表要打1e9,顯然不允許
  • 因為要求的是前綴和,所以我們可以分塊求和,整塊的由表得出,最右邊不在整塊的暴力(前面已經說了單個復雜度很小)
  • 綜合考慮時間和空間,1e9個數分成1e3塊(要考慮到編譯超時的問題?),空間1e3可以,時間1e6logx也可以

【AC】

http://blog.csdn.net/PoPoQQQ/article/details/41551913

【分塊打表】bzoj 3758 數數