1. 程式人生 > >10.29三校聯考反思

10.29三校聯考反思

炸完了= = 只有50分
第一題爆零
判重點+快速冪想法沒多大問題,但是實現時判重用了一個複雜方法出現莫名其妙的錯誤,也沒什麼好說的,考試時應該找一種簡單好寫好理
解的方法啊,而且寫完後沒有自己編測試資料進行校對,如願爆零。

第二題照樣爆零。。
很明顯的樹形dp,dp轉移想了比較久,實現的大體思路和其他人相同,但是沒寫出dp轉移就直接寫程式碼,結果出現一個較為隱晦的錯誤,掛完
了。。可以歸結于思路沒理清吧。

第三題50分
在前兩道題都沒有編測試資料校對的情況下留了一個小時20分鐘寫這道題,先寫了熟悉的LCA半小時拿到30分(還不如花時間弄幾組一二兩題
的測試資料出來= =)又五分鐘寫了個暴力拿了10分,剩下30+分鐘搞50分的基環外向樹,結果由於沒寫過加上神奇的判環方法只有10分。。
於是總分50分
平時考試很少自己弄測試資料去效驗自己的程式,弊端今天表現出來了,總是花大筆時間在寫程式碼上,壓縮看題目和思考以及驗證的時間來寫

程式碼。
還是比較後悔沒有回頭去好好過簡單題。。本來這種分類討論程式碼題就是在最後保證前兩題通過的情況下再寫能拿多少分就多少分的。。
不能急著寫程式碼呀。。慢一點看題總是有好處的。。並不是有思路並且寫出來的題必然能拿到滿分,花去更多時間拿很少的分數還不如花一點
時間改錯挽回更大的損失

思想
T1:把每個點能變換出來的點都弄出來去重後判定在正方形1/8的三角形內
沒有覆蓋的節點數量,然後快速冪。
T2:樹形dp,定義狀態dp[u][0]為u的子樹不可以提供父親禮物的組合數量,
dp[u][1]為u的子樹提供父親禮物的組合數量,然後
dp[u][0] = multipleup{ dp[soni[u]][0]+dp[soni[u]][1] }
dp[u][1] = sum { dp[soni[u]][1]*multipleup{ dp[sonj[u]][0] + dp[sonj[u]][1] } } | i!=j
為了快速計算dp[u][1]可以用
k=multipleup{ dp[sonj[u]][0] + dp[sonj[u]][1] }/(dp[soni[u]][0] + dp[soni[u]][1])*dp[soni[u]][1]
來算,由於除法不支援取模運算,用費馬小定理+快速冪快速算逆元可以優化。
(ps:剛剛推了一會公式吧程式改過來就AC了QwQ)
T3:
暴力spfa10分
LCA倍增30分
基環外向樹用LCA維護樹內詢問+環上字首和50分
仙人掌樹縮點LCA10分
說得簡單,程式碼爆炸