【題解】【CF958】Helvetic Coding Contest 2018 online mirror (teams allowed, unrated)

比賽時由於手速太慢,水的一批……
賽後改了一波題……
A1 給定兩個10*10的矩陣,問是否可以通過上下、左右對稱以及旋轉的方式重合。
直接爆搜即可
A2 字符串Hash

B1 求葉子節點
B2 在樹上選K個點,求對於K(1~N)個點之間的簡單路徑上的點數最大值。
1特判,2直徑,其他考慮貪心,從直徑的一端開始搜,剖一下重鏈,每次取最長即可。

C1水題略
C2 N個數切成K段,定義每段價值爲和模P,求最大價值。k ≤ N ≤ 20 000, 2 ≤ k ≤ 50, 2 ≤ p ≤ 100
直接DP,f【i】【j】表示前i個切成j段,轉移時,記錄一下最優位置優化一下即可。
C3 N個數切成K段,定義每段價值爲和模P,求最小价值。(k ≤ N ≤ 500 000, 2 ≤ k ≤ 100, 2 ≤ p ≤ 100)
依然DP,考慮維護g【i】【j】表示f【i】【j】取最小時,最後一段模p的最大值,轉移考慮j-1多開一段,或者在j段基礎上加在末尾,注意g【j】+當前元素如果>p應該減掉一個p。還有數組滾一下。

D1水題略。
D2線代題做不動

E1 給出平面上N個黑點,M個白點,無三點共線,問是否可以給出一個完美匹配(即黑白之間建立雙射),使線段之間無交點。
結論題,N!=M輸出No,否則輸出Yes。比賽時窩看N只有10 ,果斷寫暴力還打掛了QAQ。
證明的話,大概是考慮所有匹配線段之間的長度和,最小的匹配方案一定無交點,由三角形的三邊關係可知。
E2 數軸上有N*2個端點,要求選K對,每個點只能在一對中出現,定義其價值爲端點距離差,問最小价值和。
(2 ≤ 2K ≤ N ≤ 500000, K ≤ 5000)
考慮貪心一定只在距離差前K*3小的點對間出現即可。
E3 給出E1的構造 1 ≤ N ≤ 10000
題解是隨機一個點(???),因爲無三點共線,所以按照角度掃過去,黑-白一定是連續的,只要切成兩邊黑白點數目都相等即可,期望NlogN

F1 水題略
F2 給定數列a,以及值域{1, 2, …, m} ,再給出一個數組b,選定一個區間,設區間內值i個數爲ci,要求ci>=bi的前提下,cibi 最小。
類似two–pointer的思想,每次ci小於bi右指針就一直往右移,記個數維護一下。
F3 FFT裸題,不過要貪心一下,每次取最小兩個合併。

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