agc021 题解

link

code

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}\)

转移方程就是

\[f_{i,j}=(1+j+\binom{j}{2})f_{i-1,j}+ \sum_{k<j} f_{i-1,k}\binom{j+2}{k} \]

NTT 一下,复杂度 \(O(nm\log n)\)

posted @ 2023-03-11 18:14  houzhiyuan  阅读(24)  评论(0编辑  收藏  举报