Solution of Comet OJ - Contest #11
A.eon
-Problem designed by Starria-
在模 10 意義下,答案變為最大數的最低位(即原數數位的最小值)和原數最低位的差。
令$S$為輸入數字串,則答案為 $(\min_{i=1}^{n}S_i-S_n)%10$ 。
時間復雜度 $O(n)$ 。
B.usiness
-Problem designed by Winniechen-
這是一個很顯然的動態規划問題。
令$g_{i,j}$表示第$i$天,手里有$j$個節點,最多會返還多少節點。
第$i$天獲得節點的過程轉移為$g_{i,j+f_j}=\max(g_{i,j+f_j},g_{i-1,j})$,而對於存儲節點的過程,只需對每一種存儲方式做一個完全背包即可。
C.elebration
-Problem designed by Starria-
定義長度不超過 $\frac{n-1}{2}$ ,且不含重復顏色的段為合法的段。記 $pre_x$ 為以 $x-1$ 為右端點的合法段最遠的左端點, $nxt_x$ 為以 $x$ 為左端點的合法段最遠的右端點。
枚舉題面所述三元組中的 $a,b(a<b\le nxt_a+1)$ ,則合法的 $c$ 是 $(b,nxt_b+1]$ 與 $[pre_{a},n]$ 的交集。也就是說,當 $pre_{a}>nxt_b$ 時, $b$ 的貢獻是 $nxt_{b}+2-pre_{a}$ 。
每次向右移動 $a$ 時,將 $(nxt_a+1,nxt_{a+1}+1]$ 區間內的 $b$ 的貢獻掛在 $nxt_b$ 上,在移動 $pre_{a}$ 時將經過的貢獻減去即可。
時空復雜度 $O(n)$ 。
利用數據結構可以簡單地維護交集,這哪里卡得掉沒有刻意去卡。
D.isaster
-Problem designed by Winniechen-
對於一個圖很難處理,所以考慮將圖簡化,直接建立一棵生成樹達到原來的效果。
由於我們詢問的時候,要求只能走到編號 $\le y$ 的點,所以保留的邊兩端點編號的 $\max$ 應當盡可能小,這樣就有更多的邊可以被一次詢問用到。
所以我們將邊按照兩端點的 $\max $ 排序,建立一棵 kruskal 重構樹。(這個不會自行解決)
在此基礎上維護一棵線段樹和一個倍增數組,每次找到 kruskal 重構樹上能到達的最高點,然后詢問子樹乘積和,修改就直接修改即可。
E.ffort
-Problem designed by Winniechen-
假設總攻擊次數為 $k$ ,那么我們要把這 $k$ 次相同的攻擊分配給 $n$ 個不同的人,根據插板法來看也就是在這 $k$ 次攻擊里插 $n$ 個板。記令攻擊次數恰為 $k$ 的方案為 $ans_1$ ,插板方法為 $ans_2$ , $k$ 的貢獻即為 $ans_1\times ans_2$ 。
維護 $k$ 次項系數為一個第 $i$ 種數據結構攻擊次數中插 $k$ 個板的方案的多項式 $F_i(x)$ ,那么 $[xk]F_i{a_i}(x)$ 就是第 $i$ 種里插 $k$ 個板的方案數了。
由於我們只有 $n$ 個板,所以多項式長度始終不超過 $n$ 。在模 $x^{n}$ 意義下做多項式快速冪,最后再將 $m$ 個多項式合並即可。
整體復雜度最優可以達到 $O(nm\log n)$ , std 寫的是 $O(nm\log n\log a_i)$ 。
F.arewell
-Problem designed by negiizhao-
令 $E_S$ 表示點集 $S$ 內部的邊數, $E_{S,T}$ 表示 $S$ 與 $T$ 之間的邊數, $F_S$ 表示 $S$ 是 DAG 的方案數。
枚舉入度為 0 的點集 $T$ ,轉移為 $F_S=\sum_{T\subseteq S,T\neq \varnothing }(-1)^{|T|-1}F_{S\backslash T}2^{E_{T,S\backslash T}}$ 。
$S$ 中入度為 0 的點集的每個子集都會算一次,對其簡單容斥即可得到系數 $(-1)^{|T|-1}$ ,而系數 $2^{E_{T,S\backslash T}}$ 來自於 $S\backslash T \rightarrow T$ 的邊只能斷掉或指向 $T$ 。
對DAG計數稍有了解的人可以從這里開始閱讀
$2^{E_{T,S\backslash T}}$ 可以寫作 $2^{E_S - E_T - E_{S\backslash T}}$ ,因此原式化為$$\frac{F_S}{2^{E_S}}=\sum_{T\subseteq S,T\neq \varnothing }\frac{(-1){|T|-1}}{2{E_T}}\ast \frac{F_{S\backslash T}}{2^{E_{S\backslash T}}}$$
對上述式子進行子集卷積即可。
對DAG計數稍有了解的人可以從這里開始閱讀$\surd$
賽中后吐槽總結
- BY Winniechen&Starria
出題人的一些吐槽
-
為什么10min還沒有人過B (在10min的時候
-
為什么大家D都一直在Wa啊!
-
為什么有人會寫樹狀數組啊!
-
CD是不是順序反掉了啊……(這是Starria的鍋!
-
B看起來出難了(手動狗頭)
-
怎么有人1h不到就出F了!
-
(看起來F卡人常數了….
-
聽說有人覺得題面不好,我不這么認為
-
1.5h的時候,終於六道題的一血都出來了,這讓出題人很激動
-
2h的時候,終於有人A掉5道題了
-
2h 10min的時候,終於有 >10個人切 四道題了
-
2h 23min的時候,終於有第二個切E的人了!
-
在最后的10min的時候,發現supy的F被卡常了
-
然后終於出現了這場比賽唯一一個AK的選手!
-
最后看起來,CD放反了,EF放反了
-
為啥D題大家都沒有發現$a_i ,v \le 10^9$會比$998244353$大
-
為啥$B$題會有那么多人wa那么多發
-
C題出題人為何如此毒瘤
-
為何題面會出成這個樣子
-
盡請期待后天晚上的視頻題解,屆時出題人Winniechen和Starria會為大家講解這次試題,並解答一些花絮!
出題人的一些自我坦白與反思總結
- 其實原來的題目不是這個樣子的,只不過在考試前三天,F的算法出現了問題,今天才出好這個F的數據,所以讓人感到抱歉
- 每道題的數據都被dreamoon加強過,原來我的數據菜得要死
- 然后兩位(三位)出題人都是鴿子,都很能拖
- 主要負責人(Winniechen)多數時候不能及時的傳遞信息,並且不參照出題手冊出題,讓AA姐等工作人員感到棘手,在此我深表歉意
- 謝謝大家支持!
- 出題人的QQ:Winniechen 1967199892 , Starria 972808330