1. 程式人生 > >2016.12.30【初中部 GDKOI】模擬賽B組

2016.12.30【初中部 GDKOI】模擬賽B組

總結:

這次比賽做的比較差,沒有發揮出應有的水平,像第一題這種可以稱之為“一眼題”的題目,竟然一分沒拿,找找原因,發現還是比賽時不夠認真,座標說了全部>0,為什麼還考慮負數?題目提醒了資料的範圍,為什麼不改int64,這些毛病都是不容犯的,但還是犯了,哎~

但像T2這種典型的樹形DP題,還要什麼逆元之類的,能水個暴力就行了,不必太過要求高。

第3題更不用說(什麼LCT,什麼鬼嘛)

而第四題,在考試的時候還是有可能可以做出來的,沒有盡力~

下面寫下題解..

題解:

T1:

·不用說了,一眼題,優先佇列維護即可

T2:

·顯然Dp

·f(i)=f(i.left)*(fi.right)*c

(i-1,i.lefttot);

·i.left表示i的左節點,i.right表示i的右節點,lefttot表示左子樹的節點數,i-1表示i這棵樹總共有多少個除根外的節點

·之後會發現time over,原因是求c的效率太低

·因為模運算是不茲瓷除法的,當然我們可以把要乘和除的數先分解一下質因數,然後抵消掉再摸,這樣可以解決精度問題,加上記憶化之後大概可以拿到80分

·考慮優化C

·可以用逆元

·why does the 逆元 can do it?

·逆元之所以can do it,是在於它不僅解決了精度問題,而且非常快——把除法轉化為了乘法

·舉個例:(a/b) mod c=x,則x=(a*N(b,c)) mod c

 

·N(b,c)表示bc的逆元

·N(b,c)=(b^(c-2)) mod c

·證:

·因為 (b^(c-1) mod c) 恆等於 1(費馬小定理,前提:c為質數),所以,((b^(c-2)) mod c)=1/b

·之後將C的數值帶進計算即可

T3:

·普通的克魯斯卡爾60分

·可以用水法

·掃到一條邊後發現圖被連通了,則從這條邊往回掃,掃到剛好再一次連通時,下次便從這條邊的下一條邊繼續往下掃,以此類推

·優化的正確性顯然

T4:

·考慮最優性

·題目要求字典序最優,也就是每個格能放得數儘量小,則我們從最小的數開始列舉,列舉每一個格,如果當前放的格在我們可以拓展的正方形的第一行,我們就看看能不能拓展,如果不是在一個正方形的第一行,無需考慮拓展

·隨後,對於每一個格,不能與之上下左右重複,並滿足最優,以此類推即可