1. 程式人生 > >2018年10月3日訓練日記

2018年10月3日訓練日記

今天的比賽打了一小時。。。做了個A然後GG了。。。

由於昨晚有事情沒睡,結果今天上午定了兩個鬧鐘外加四個電話都沒叫醒。。。醒了之後比賽已經接近尾聲了。。。

這場題目總體來說比較簡單,但是題意表述的不太好,基本都是猜題意。

現在除了3道簽到題,已經補完了5道。難度不是很大,但是題意全靠猜。思維性還是比較強的,順便又鞏固了一遍樹狀陣列的原理。總之,還是要學會動腦。

當然,更需要學會讀題。。。

正在補樹分治的題目,順便整理了一下板子,又去看了一遍原理,學習了一下高維字首和的相關知識。

前幾天補2016大連icpc現場賽的題目時,遇到了一個樹分治,這個題除了套一個樹分治的模板還要加上高維字首和的東西。然後發現自己什麼都不會….(只是一個銅牌題),補了一下相關的知識,先寫一下高維字首和吧。

高維字首和:(統計超集個數)

for(int i = 0; i< 3 ;++i){
    for(int j = 0; j<8 ;++j)
        if( !(j&(1<<(i))) ) a[j] +=  a[j|(1<<(i))];

簡單的三行程式碼,a[j]可以統計出對於當前狀態 j 的所有超集的狀態和。
舉個例子a[1010]
經過高維字首和的三行程式碼之後,a[1010] =[1010] + [1011] +[1110] +[1111] 也即是當前狀態的四個超集的和。

希望早日能靈活運用樹分治模板。

繼續努力。