AtCoder ABC 312 复盘
A Chord
一道水题,直接 if 判断字符串解决。
B TaK Code
也是一道水题,只需要枚举每个点做为左上角然后判断是否合格即可。
C Invisible Hand
第一眼看到就知道是二分。但是,因为我天真地把左右边界设为数组最小最大值而非 $0$ 和 $10^9+1$,从而 WA 了 $\LARGE{\texttt{N}}$ 次……时间复杂度 $O(n\log n)$。
D Count Bracket Sequences
首先可以想到 DFS 搜索每一个问号替换后的状态,时间复杂度 $O(3^n)$,显然会爆炸。
考虑 DP,这里我们的状态是第 $i$ 个字符到第 $j$ 个字符的子串中至多能有多少个括号序列,初始状态为第 $0$ 个字符到第 $0$ 个字符的子串中之多能有 $1$ 个括号序列,转移方程是
$$ f_{i+1,j+1}=(f_{i+1,j+1}+f_{i,j})\bmod 998244353\ (s_i=\texttt{)})$$
$$ f_{i+1,j-1}=(f_{i+1,j-1}+f_{i,j})\bmod 998244353\ (j\ne 0,s_i=\texttt{(}) $$
时间复杂度 $O(n^2)$。
F Cans and Openers
这道题可以使用贪心。首先,将易拉罐的幸福度降序排序并求和,我们可以求出对于每个 $t$ 在选择 $t$ 个易拉罐时的最大幸福感。因此,只需要知道对于每个 $s$ 在选择 $s$ 个普通罐头和开罐器时的最大幸福感即可。然后,将普通罐头的幸福度和开罐器的使用次数升序排序,如果还有一个可用的开罐器,就选择一个幸福感最大的普通罐头;否则,选择一个能打开最多罐头的开罐器。时间复杂度 $O(n\log n+n)$。

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号