Solution Set -「ARC 107」
阿新 • • 發佈:2020-11-02
「ARC 107A」Simple Math
Link.
答案為:
\[\frac{a(a+1)\cdot b(b+1)\cdot c(c+1)}{8} \]「ARC 107B」Quadruple
Link.
列舉 \(i=c+d\),則 \(a+b=i+k\),乘法原理計數。
「ARC 107C」Shuffle Permutation
Link.
由於矩陣內無相等元素,所以行和列的順序可以直接乘法原理。以對行的排列方案計數為例,並查集維護所有可以交換位置的行,則行的方案為每個集合大小的階乘之積。列同理。
「ARC 107D」Number of Multisets
Link.
我真的傻了啊這題都想不出來。
DP,令 \(f(i,j)\) 表示 \(n=i,k=j\) 時的答案。利用當 \(i<j\),\(f(i,j)=0\) 的邊界,有轉移:
\[f(i,j)=f(i,2j)+f(i-1,j-1) \]自行理解。複雜度 \(\mathcal O(nk)\)。
「ARC 107E」Mex Mat
Link.
結論:\((\forall i,j>4)(a_{ij}=a_{i-1,j-1})\)。手玩一下可以證明。(
寫的時候可以用 std::vector
,這樣直接在同一個“陣列”上二維下標引用會舒服一點。
複雜度 \(\mathcal O(n)\)
「ARC 107F」Sum of Abs
Link.
首先考慮把絕對值轉化一下,對於一個集合 \(\{a\}\),顯然有:
\[|\sum a|=\max\{\sum a,\sum-a\} \]也就是說,一個聯通塊內的數可以同時取負。
從資料範圍 \(n,m\le300\) 又想到最小割。不妨先獲得所有 \(|b_i|\) 的收益,然後建圖描述刪點的操作。
一種建圖如下(\(b_1\ge 0,b_2<0\),圖中 \(i\) 應為 \(2\),抱歉 qwq):
\(i+\) 表示這個點在聯通塊中作正貢獻,\(i-\) 則相反。割去 \(\langle i+,i-\rangle\)