總之就是非常拉
A
發現有 \(\frac{a}{b}\times\frac{b}{c}=\frac{a}{c}\),所以貢獻可以拆開,拆成兩兩相鄰的乘積。
然后直接貪心如果 \(\ge 1\) 就乘上即可。
B
設三種顏色分別為 \(0,1,2\),則每次變化總和 \(\bmod 3\) 是不變的。
所以如果要把所有球變成 \(k\),剩下兩種球顏色和必須 \(\bmod 3\) 相同。
然后直接枚舉兩兩就行了。
C
賽時思路:差分,然后變成以下兩個限制
- \(\sum_{i=1}^nc_i\le M\)
- \(\sum_{i=1}^nc_i(n-i+1)=S\)
要求最大化 \(\sum_{i=1}^nc_i(\sum_{j=i}^na_j)=\sum_{i=1}^nc_ihz_i\) 其中 \(hz_i\) 表示后綴和。
按照 \(\frac{hz_i}{n-i+1}\) 排序,顯然越大越優。
首先貪心地填最大的,然后考慮這樣可能會不滿足 \(\sum_{i=1}^nc_i\le M\)。
首先,我們考慮如果我們選了前面的兩個,發現如果調成一個肯定比原來優。
所以最多只會選兩個位置有數。
直接 \(O(n^2)\) 枚舉就做完了。
但是上面的貪心正確性還沒證明,如果是錯的勿噴。
D
考慮怎樣會不合法。
首先如果兩個相同元素相鄰,那肯定刪不掉,可以憑這個把序列划分成若干段。
發現合法性僅和所有刪除元素左右第一個未被刪除元素決定。
所以每段之間有“高牆”,段和段之間貢獻肯定獨立。
經過假了無數次后的猜結論,發現刪掉的序列只有形如 a(bab...ba)b
或 a(bab...bab)a
才會不合法。
感性證明就考慮如果存在第三個元素,那至少有一個元素不等於左右第一個元素,可以先按它左右一個一個刪掉。
嚴格證明可以考慮歸納法。
然后就做完了, 考慮 dp 表示當前這個元素作為最后一個被保留的元素的方案數(不考慮它右邊
然后隨便 \(O(n)\) 轉移一下就做完了。