附註 \(1\):由於 Codeforces 伺服器故障,本題的程式時限為標稱的二分之一。
附註 \(2\):若難度標記為形如 XXX/YYY
的格式且斜線前後顏色不同,則前者為作者估計,後者為洛谷標註。(吐槽:洛谷很多題目難度虛高)
題目
Dashboard
題目分析
A
難度:入門 / 普及−
演算法標籤:貪心
題目大意:給你 \(n\) 個數,然後你分成若干個子序列,要求每個子序列至多有 \(2\) 個負數,求最少的子序列數。
題解:每個子序列分 \(2\) 個負數即為正解。讀者自證不難。
B
難度:普及− / 普及/提高−
演算法標籤:模擬
題目大意:給定若干組 IPv6 地址的縮略形式,求這些地址的完整形式。
題解:字串處理。
IPv6 的地址縮寫(基本上)遵循兩條原則:
- 省略前導 \(0\);
- 連續的 \(0000\) 串用
::
代替(如1234:5678:0000:0000:0000:0000:0938:0000
\(\rightarrow\)1234:5678::938:0
),且保證::
符號最多出現一次; - 特別的,
0000:0000:0000:0000:0000:0000:0000:0000
\(\rightarrow\)::
。
因此這樣處理:遍歷字串,判斷每“節”(即相鄰 :
及頭尾之間的內容)字元數,缺的補全。若某節中沒有字元則判斷長度後全部輸出 \(0\)。
\(1.5\) 倍經驗:洛谷 P2815
C
難度:普及/提高−
演算法標籤:貪心
題目大意:
給出一個長度為 \(n\) 的序列,序列僅包含 \(1\) 到 \(k\) 的數字,且對於每個數字,在序列中的出現次數至少為一次。
現在請你選出一個數字,使刪去數列中所有的這個數字後,相鄰位置的數字是不同的個數最小。
如果答案有多個,請輸出最小的一個。
題解:不難發現形如 xxxxx
的子串對答案的貢獻和 x
是一樣的。然後直接做就做完了。
D
難度:普及+/提高
演算法標籤:幾何、三分、雙指標
題目大意:
現在有 \(n\) 個點 \(A_i=(a,y_i)\),\(m\) 個點 \(B_i=(b,y_i')\),點 \(O=(0,0)\)。
定義 \(|XY|\) 為 \(X,Y\) 兩點間歐幾里得距離,最小化 \(min_{i=1}^{n}min_{j=1}^{m}(|OA_i|+|A_iB_j|+l_j)\),求對應的 \(i\),\(j\)。
題解:暴力的複雜度是 \(O(nm)\) 的。因此考慮最佳化。
不難發現排序後,當 \(j\) 是一個常數時,\(f(i)=|OA_i|+|A_iB_j|+l_j\) 是一個單谷函式。於是可以三分。
時間複雜度 \(O(m \text{log}_3n)\),可以透過這道題。
E
難度:普及+/提高
演算法標籤:暴力(?)
題目大意:
給一個怪物,然後它一開始看著右邊,每一秒它會做出如下行動:
- 如果它的下面是空著的,那麼它就掉下去。特別注意它的視角不變,也就是說它一開始向右看,那麼掉下去也向右看。
- 否則它就往視線的方向走,如果碰到
+
它會破壞掉,然後轉視角;如果是#
那麼它破壞不了,但它依然會換視角。
每個操作可以看成 \(1\) 秒之內完成的。求出它下到 \(1\) 樓的時間。
題解:暴力 \(O(nm^2)\) 的會 T。可以看出某些時候它可能會重複走走過的路線。那麼這種情況下考慮跳過空區間。這樣複雜度就降為 \(O(nm)\) 就過了。