noip2016提高&普及組簡要題解
提高組
兩天的難易程度都是1-3-2
Day1
toy
亂搞模擬
running
首先對於一個人(s,t),我們把這條路徑拆分為(s,lca)與(lca,t),其中lca為s與t的最近公共祖先
先看(s,lca)這一類,對於一個節點x,一個x的子樹中的節點y,只要滿足
現在成了一個經典的問題: 在x的子樹中存有多少個d[y]
但注意到如果路徑(s,t)在x的子樹中但不經過x,ans[x]是不能+1的,所以對於路徑(s,lca),我們分別在s與lca打一個+d[y]與-d[y]的標記.然後dfs一遍統計答案.因為對於節點x我們只關心一個值,所以開始時記錄一下值,返回時減掉就是x的子樹中新增的值.
對於(t,lca)同理,需要注意的是特判lca也能觀察到的情況.
classroom
首先我們不難發現,這個期望值是可以相加的.即上完第i節課所用的期望值加上從第i節課的課室到第i+1節課的課室的期望就等於上完第i+1節課的期望.因為他們是互不影響的.
然後這就變成了一道很簡單的dp.
day2
problem
楊輝三角形+矩陣字首和預處理,O(1)回答詢問.
earthworm
首先暴力就是打一個堆,然後維護堆內的值全部與真實值差i*q
q=0的做法就是有每一次分解出來的x和y都會比下一次的x和y的大.所以維護一個連結串列兩個指標處理插入就OK了.
然後正解就是合併一下,維護連結串列中的值全部與真實值差i*q.分解出來的x,y減掉i*q後依舊是單調不增的
angrybirds
狀壓DP.
首先n^3處理出
然後還能發現就是無論如何總要打掉第一個沒被打掉的,那就在當前這一次打掉.
然後就是2^n*n^2的DP了.
普及組
T1,T2不說了 (雖然打完就交都只有70分)
T3
簡單模擬一下,用一個指標維護一天內的人,再開一個桶維護人數.
T4
設d-c=x,那麼b-a=2x
然後c-b>6x
然後列舉x,O(n)預處理一下c+d=x的組數,再列舉a,計算ansa,ansb.再列舉d,計算ansc,ansd.
這樣就是O(n^2)的暴力,能有95分.
對於最後一個點,我們觀察發現x最大能取到n/9.