天天看點

Educational Codeforces Round 114 (Rated for Div. 2) 題解

題意:給你一個整數 \(n\) ,構造并列印長度為 \(2n\) 的 \(n\) 個不同的合法括号序列。

題目分析:模拟,不妨設最初的括号序列為 \(\underbrace{(((}_{n} \cdots \underbrace{)))}_{n}\) ,每次從中取出一對合法括号放外邊即可。

AC代碼:

題意:給你四個整數值 \(a\) 、 \(b\) 、 \(c\) 和 \(m\) 。

判斷是否存在包含以下内容的字元串:

\(a\) 個字母 \(A\)

\(b\) 個字母 \(B\)

\(c\) 個字母 \(C\)

正好含有 \(m\) 對相鄰的相等字母(即 \(s[i] = s[i+1]\) )。

題目分析:不妨假設 \(a \leq b \leq c\) ,先考慮相鄰相等字母的上下限:

上限:\(\underbrace{AAA}_{a} \cdots \underbrace{BBBB}_{b} \cdots \underbrace{CCCCC}_{c}\) ,即 \((a-1)+(b-1)+(c-1)\)

下限:\(\underbrace{CACA}_{a個C} \cdots \underbrace{CBCBCB}_{b個C} \cdots CCCCC\) ,即 \(c - (a+b) - 1\)

可以證明,若 \(min \leq m \leq max\) ,則這樣的序列一定存在。

\(min +1\) :\(\underbrace{ACACA \cdots CA}_{a-1個C} \underbrace{CBCBCB}_{b個C} \cdots CCCCC+C\)

\(min +2\) :\(\underbrace{CACA \cdots CAA}_{a-1個C} \underbrace{CBCBCB}_{b個C} \cdots CCCCC+C\)

在 \(min\) 的基礎上每多出一對鄰相等字母,就把字元串的頭字母放到該字母最後一次出現的位置之後。

題意:很久很久以前,巨龍突然出現

你有一支含 \(n\) 位勇者的小隊,現在有 \(m\) 條惡龍,第 \(i\) 條的防禦為 \(x_i\) ,攻擊力為 \(y_i\) 。對每條龍,你可以選出一名能力值 \(a_i \geq x_i\) 的勇者誅戮惡龍,其餘勇者留下來防守,且防守的勇者們能力值總和 \(sum \geq y_i\) 。

同時,你可以花費 \(1\) 點 \(cost\) 将任意勇者的能力值提升 \(1\) 點,此操作可以進行任意次。

問擊敗第 \(i\) 條龍的最小花費是多少(對戰每條龍時所有勇者的能力值重置)。

題目分析:采取貪心政策,找到序列中首次出現的 \(\geq\) 和 \(\leq x_i\) 的值 \(a_i\) ,然後計算相應花費輸出較小的即可。

題意:給你 \(n\) 個裝備槽,每個裝備槽有 \(c\) 件裝備可以挑選,每件裝備的屬性值為 \(a_{i,j}\) ,現有 \(m\) 種不合法的方案數,求在此條件下使得屬性值最大的組合方案。

題目分析:一開始用 \(dfs\) 暴搜結果 \(MLE\) 了。這裡給出一種貪心的政策,優先用更好的裝備,第 \(i\) 個裝備槽隻考慮能使方案合法的最好的第 \(j\) 個裝備,每次從優先隊列中取出目前最優方案,如果這個方案已經被 \(ban\) 了,就将其分成 \(n\) 個後繼方案(一個方案的後繼就是對于目前組合裡的某個槽,用剛好差一檔的裝備換上去),但分出的後繼方案可能會有重複的,是以我們選擇用 \(set\) 去重。由于優先隊列采取的是大根堆,是以這樣的做法一定能得到最優解。