這次的比賽又炸了。
t1:這題正解很簡單,但是我想了很久都沒有想出來。
正解如下:
對於乙個點x,如果它對答案有貢獻,那麼從1到x的路徑上的所有點都是按順序出現的,而其他點對它沒有影響。所以x對答案有貢獻的概率就是1/(deep[x]!)。然後求和之後就發現ans=sum(1/(deep[x]!))。
總結:這種期望題一般就是dp或者推式子,如果dp實在做不下去了,那麼就推一下式子。而且要勤於轉換思維,從下往上不行就從上往下。
t2:又是一道很繞的題。
首先如果我們要走完以x為根的子樹,那麼在樹中休息時不必要的,我們完全可以在x休息夠了之後再往下走,然後一次性走完x的子樹。
明確了這個之後我們就定義兩個量:
1、x的需求f[x],即一次性要走完x的子樹的最小要在x休息的時間。
2、x的貢獻c[x],即走完x這可子樹對總體力值產生的貢獻。其實c[x]=sum(點權)-sum(邊權)*2
知道了這個之後,我們假設如果求出了所有的f,那麼ans就是f[1]。所以現在我們的任務就是求f。
那麼f怎樣求呢?現在我們考慮樹形dp。
對於乙個x和它的所有兒子y,我們設v[y]=c[y]-2*l(即走完y所產生的貢獻),然後還要求lim[y],即從x開始走完y子樹的最小初始體力值。
考慮lim[y]怎樣求。首先我們要保證「走得下去」,即lim[y]>=l+f[y];然後還要保證「走得上來」,即lim[y]>=l*2-c[y]。
所以最終lim[y]=max(l+f[y],l*2-c[y],0)。
這時我們就求出了從x開始走完每一棵y的子樹的lim最小體力值和v貢獻。然後我們要使得f[x]最小。
設當前的體力值為t,則t的初始值為a[x]。首先對於v>0的,我們把lim從小到大排序,然後逐一取。即如果t>=lim[y]則t+=v[y]。否則要增大t來滿足lim[y]的需求,而此時的f[x]也要增大。
接著對於v<0的,我們首先把全部v加上,然後問題就變成了對於t-v[y]>=lim[y]的我們可以直接t-=v[y],否則要增大f[x]和t來滿足。而這時因為-v[y]>0,所以做法就和v>0的一樣了。注意此時要把lim[y]+v[y]從小到大排序,因為能取得條件是t>=lim[y]+v[y]。
最終算出f[1],然後答案就是f[1]了。
t3:其實這題的正解並不算很難,**也不算很長。
首先我們注意到乙個條件:m<=n-2。這就意味著a[1]的值一定是由某個a[n~l]和a[2~r]轉移過來的。那麼我們就可以進行分類討論了。
(1)1不選。我們現在就是要從m個中選len2個位置,這len2個位置是有序的,剩下的隨便選除了n和1以外的數。這種情況的方案數就是c(m,len2)*a(n-len2-2,m-len2)。
(2)1選。那麼此時1一定要在2的後面,為了保證這個,我們可以從m個中選出len2+1個,然後指定這len2+1個中的最後乙個是2,1可以隨便放在其他len2個位置上,剩下的除了n以外隨便選。方案數就是c(m,len2+1)*c(len2,1)*a(n-len2-2,m-len2-1)。
12n。這種的最終貢獻是sum(a[2~r]+a[l~n])+a[1]*2。在算方案數時,我們要保證1在2和n的後面,2在n後面,並且2~r,l~n是有序的。那麼我們可以從m個中選出len1+len2+1個,指定這當中的最後乙個是n,再從剩下的中選出len2+1個,指定最後乙個是2,1可以任選剩餘的len1個中的乙個,其他沒有被選上的可以隨便選。式子就是c(m,len1+len2+1)*c(len1+len2+1,len2+1)*c(len2,1)*a(n-len1-len2-1,m-len1-len2-1)。
1n2。同上,只不過len1與len2要互換。
21n。這個的貢獻是sum+a[1]的。具體與1情況相同,還是選擇和指定,只不過沒有了「1可以任選"這一項。方案數=c(m,len1+len2+1)*c(len1+len2+1,len2+1)*a(n-len1-len2-1,m-len1-len2-1)。
2n1。這種情況的貢獻為0。
n12。同3情況。
n21。貢獻也為0。
最終所有的方案數加起來就是答案了。不要忘記判斷k=0的特殊情況。
NOIP提高組 矩陣
在麥克雷的面前出現了乙個有n m個格仔的矩陣,每個格仔用 或 表示,表示這個格仔可以放東西,則表示這個格仔不能放東西。現在他拿著一條1 2大小的木棒,好奇的他想知道對於一些子矩陣,有多少種放木棒的方案。因為棍子是1 2的,所以很容易就能發現,兩個被分割的塊,除了跨越兩個塊擺放木棍的方案數會對答案有影...
NOIP提高組2005 過河
過河 river 問題描述 在河上有一座獨木橋,乙隻青蛙想沿著獨木橋從河的一側跳到另一側。在橋上有一些石子,青蛙很討厭踩在這些石子上。由於橋的長度和青蛙一次跳過的距離都是正整數,我們可以把獨木橋上青蛙可能到達的點看成數軸上的一串整點 0,1,l 其中l是橋的長度 座標為0的點表示橋的起點,座標為l的...
NOIP提高組 20151029模擬
其實這套題目並不算太難,但是還是發揮不了100 水平。第一題直接線性篩法,求出質數,然後就可以判斷乙個數是否為質數了。這道題還可以用miller rabin去求,後者的速度較快,如果資料再大些,就要使用後者了。第二題,比賽時發現了,當n 7時,答案會每四個一迴圈,但是就沒有繼續往下想,其實想下去會想...