agc021 题解
A \(\color{gray}\bigstar\)
贪心,后面全放九,放不了就减一。
B \(\color{blue}\bigstar\)
不会计算几何,紧急学凸包。
显然只有在凸包上的点答案可能不是 \(0\),因此先把这些点求出来。
那么一个点所占据的角度就是和相邻两个点的中垂线所形成的角,这个可以轻松算。
注意共线的时候要特殊判一下。
C \(\color{Gold}\bigstar\)
首先可以观察到如果 \(n,m\) 中有奇数,说明最后一行只能放横的,最后一列只能放竖的。
放完之后,剩下的地方直接贪心放,感觉挺对的。
然后 WA 了,不知道哪里图了,所以看了题解。
如果数据是 3 3 2 2
,可以构造出答案是:
<>^
^.v
v<>
所以右下角需要特判一下即可。
前面贪心放为什么是对的呢?考虑每个 \(2\times 2\) 为一组,每组中放两个横的或者竖的,这样最后如果分别剩下一个就用上面那个构造,否则无解。
D \(\color{Green}\bigstar\)
简单题,最后的公共子序列在原串中一定是一个回文子序列,因此直接区间 dp 即可。
E \(\color{Gold}\bigstar\)
依然考虑去对应,对于一个 RB
方案,先考虑 \(n=1\) 的情况,如果 \(R>B\),那么必定合法,\(R<B\) 必定不合法,\(R=B\) 的情况比较阴间,不太会。
考虑还需要去满足 \(n-1\) 个其他的,那么考虑让一个东西合法最优秀的方案就是给一个 \(R\) 以及它后面的一个 \(B\),这样 \(R-B\) 不变。
如果这样的东西全部取完了,把 \(R\) 想象成左括号,\(B\) 是右括号,那么显然是前面全是 \(B\),后面全是 \(R\)。
如果还有没满足的,那么就只能直接给一个 \(R\) 去满足。
这样放完后,剩下的全部给第一个即可。
但是此时第一个吃的球可能 \(R=B\),非常难以判断,因此看题解。
如果 \(R=B\) 且合法,说明最后一个一定是 \(B\),直接令 \(B-1\),这样满足 \(R>B\),一定合法。
因此只要强制第一个一定是 \(R>B\) 的,数方案数即可。
枚举一下 \(R\) 放即可,卡特兰数算一下就好了。
F \(\color{blue}\bigstar\)
这个题就相对简单了。
依然考虑去对应,对于一种 \(A,B,C\),将所有能涂黑的全部都涂黑,然后数方案。
相当于每一列选了一个区间,然后每一行要选择一个点,不能是区间端点,只需要考虑 dp 顺序即可,是从上往下还是从左往右。
从左往右 dp,这样会确定一些行已经选过了点,然后再不断确定新的点。
设 \(f_{i,j}\) 表示已经有了 \(i\) 列,其中有 \(j\) 行已经选过点的方案数,然后考虑去加一行。
如果加一行不选点,那么考虑区间就可以乱选,系数是 \(1+j+\binom{j}{2}\)。
否则需要选,比如 \(f_{i,j}\) 去转移 \(f_{i+1,k}\),相当于 \(k\) 个里面选择 \(j\) 个表示已经选过的东西,然后又要选一个区间包含所有没选过的东西的方案。
令 \(x=k-j,y=j\),也就是说直接插板,然后 \(y\) 的最左边和最右边两端要各选一个点来放区间。
这是经典套路,直接多两个球,多两个板即可,最后得到 \(\binom{x+y+2}{x+2}=\binom{k+2}{j}\)。
转移方程就是
NTT 一下,复杂度 \(O(nm\log n)\)。