Codeforces Round #570 (Div. 3)
A
位數和為\(4\)的倍數,涉及到進位,直接把最近的\(30\)個判斷一下就好了
B
最大的可能的為:最小值\(+k\),如果最大值能\(≤\)該值則成立,否則輸出\(-1\)
C
先全部選\(b\),看是否能為正,在考慮正的這部分去選\(a\),就等于補掉多少個\(a-b\)
D
有一個明顯的坑點就是不能整體賦值,大部分\(t\)掉的都是這個原因
我們統計每種顏色的個數,排好序后單獨扔進一個數組,考慮從大到小遍歷,每次優先取滿足條件的最大值
具體實現就是拿一個指針記錄能選的最大值,如果遍歷到的值剛好為指針則選擇,指針左移;如果大于指針,也選指針;如果小于的話,選該值,將指針賦為該值\(-1\)
E/H
用\(lst_i\)表示該字符上一次出現的位置;用\(f_{i,j}\)表示前\(i\)個字符,長度為\(j\)的互異的個數
\(lst_i=0\),說明該字符第一次出現,\(f_{i,j}=f_{i-1,j}+f_{i-1,j-1},++f_{i,1}\)
\(lst_i≠1\),說明前面出現過該字符了,我們得考慮容斥,顯然\(lst_i\)前面與其組成子序列的前綴也能與\(i\)組成相同的子序列,\(f_{i,j}=f_{i-1,j}+f_{i-1,j-1}-f_{lst_i-1,j-1}\)
\(f\)數組成指數級增長,而\(k\)有限,故限制\(f\)不超過\(k\)
每次優先選取最長的子序列,直接統計答案就好了
F
最難的題,用貪心,每次選取最大值,然后除掉因子去選
但我們發現能構造出\(hack\)的數據,比如\(6,10,15,30\),這是因為\(\frac{1}{5}+\frac{1}{3}+\frac{1}{2}>1\),特判一下這種情況就好了
G
轉載于:https://www.cnblogs.com/y2823774827y/p/11094831.html
總結
以上是生活随笔為你收集整理的Codeforces Round #570 (Div. 3)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C# XML的序列化与反序列化
- 下一篇: 牛逼!简单的代码提交能玩出这么多花样