【隊內訓練】CCPC2016杭州題解

CCPC2016杭州
A HDU 5933 ArcSoft's Office Rearrangement(模擬題) 163 / 509
B HDU 5934 Bomb(tarjan) 112 / 375
C HDU 5935 Car(貪心) 156 / 660
D HDU 5936 Difference(折半暴力) 37 / 304 (賽後過掉)
E HDU 5937 Equation(dfs) 25 / 64 (賽後過掉)
F HDU 5938 Four Operations(貪心) 171 / 513
G HDU 5939 Game of Eliminate 4 / 62
H HDU 5940 Hazy String 0 / 3
I HDU 5941 Inequality 3 / 39
J HDU 5942 Just a Math Problem 7 / 23
K HDU 5943 Kingdom of Obsession(二分圖) 72 / 776
過程
這場是第一次打這種前期爆炸後期翻盤的場,心情真的很好,開局由於A的模擬ffx一上來有個特判寫錯了,找了好久的bug也找不到,於是換了wk上來找bug,電腦分兩塊ffx在右面敲F,這時候wk找到了一個bug改了一下提交,又wa,時間已經一個多小時,全隊心情爆炸,之後ffx隨便想了一組A的樣例,發現有錯誤,原來wk找到bug之後特判的位置改錯了,又改了一下就過了,這時候ffx也敲完了F,submit,wrong anwser,返回查看代碼,怎麼算怎麼對,後來發現字符串長度要判一下,不然可能會非法訪問,改了之後ffx加了個初始化的ans,如果不滿足條件就不走第二種,但是由於當時沒想到答案會出現負數,又wa了,下來之後發現了這個問題,改了就過了,這時候已經rank107了,在ffx敲F的時候wk發現C是個貪心,於是F過了就上機開始敲,然後就1A了,交了之後rank變成了102,wk敲C的時候ffx和sbw推出了K的一些東西,ffx上機敲了K題,又是1A,rank75,ffx敲k的時候wk發現B是個做過的tarjan,改改就能過,於是ffx交了K之後wk上機開始抄板子,但是敲完之後發現樣例怎麼也過不去,開始了將近半小時的找bug之旅,找了半小時之後,ffx決定換個板子敲一下,ffx拿出自己以前的板子對比一下發現,wk的板子有個cnt寫錯了(由於wk將棧改爲手寫,之後忘記測試,導致板子出現問題,以後還是要注意一下),之後改掉了模板的錯誤,B也1A了,rank變爲52,已經滾到銀牌區了,由於三個人過於興奮,導致一個差不多做過同類型的D最後沒開出來,又滾回了銅首,不過也算是翻盤了,很是開心。
題解
A.F 細節模擬題
A.要注意之前都用光的時候是不需要消耗次數去合併的
F.要注意可能出現負數,可能串長不夠
A題代碼 https://paste.ubuntu.com/p/mnVMkYD9TV/
F題代碼 https://paste.ubuntu.com/p/jzXBfHkZt4/
B題tarjan
題意建模之後就是對一個有向圖並且每個點有權值的圖進行選點,要求最終的點集要能到達每個點而且點集的權值和最小,當弄懂題意之後就是一個裸的tarjan了,縮點之後在每個入度爲0的聯通塊裏面選一個最小的加入貢獻就可以了。
https://paste.ubuntu.com/p/Kxtdy86tFC/
C題貪心
從後往前貪心,由於要求每一段都是整數秒跑完,每一段都儘量保持一個很大的速度,如果這個速度大於當前區間長度,就把速度變爲當前區間長度/s,否則就看當前速度需要幾秒,如果是整數秒就直接取,如果不是整數秒就讓當前秒數+1,速度調成相應的速度。
https://paste.ubuntu.com/p/pWRbJJF7jh/
D題二分枚舉
我們能夠證出最終的長度是小於10的,這位時候我們發現情況太多,大概有10!種,當遇到這種去全排列會超時而分成兩半去排列不會超時的時候,就把原題分成兩半,分別存入數組,排序,遍歷第一個數組,然後查找第二個數組中滿足條件的結果數,(注意不要用map)。
https://paste.ubuntu.com/p/s2QBRFrKkY/
E.dfs
題意就是給你帶有1-9數字的塊,每個塊有a[i]個,給你無數個+無數個=,問最多用已有的塊湊出多少等式。1+2=3,2+1=3算兩種。
我們推一下發現只有32種等式,但是這樣枚舉每種等式是否選擇的時候2^32會超時,然後我們發現1+2=3,2+1=3,這兩種等式可以在一起向下遞歸,只不過一個是所有塊-2,另一個是-1,我們就把複雜度從Z232 變成了320 ,但是這樣還有可能不會AC,我們再將答案最大值優化加上,也就是就算後面全選都不會超過當前最大值,這樣的話我們就AC了,202ms。
https://paste.ubuntu.com/p/rJYnZyhsgk/
K題二分圖
我們可以知道當s數組中存在兩個質數的時候,肯定是不可以的,於是我們先本地打個表發現1e8之內兩個素數最大的差是200多,猜想一下1e9最多也就600,於是先將兩個數組相交的部分去掉,當s數組長度超過600是就是NO,否則對每個s數組能整除a數組的元素建立邊,跑一下二分圖看是否可以完全匹配就可以了。
https://paste.ubuntu.com/p/pd6zC9N6yY/




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章