Problem A
Problem B
考虑把某条边卡在槽内,这样两个点的位置确定了,都在边上,
当这条边长度小于等于槽宽度的时候,如果剩下那个点在区域里面,
那就直接返回三角形的高。
否则用一系列公式算出三角形在槽内的高度,注意也要判断剩下的点是否在区域里面。
最后,别写错叉积……
Problem C
Problem D
Problem E
签到题
Problem F
Problem G
Problem H
Problem I
Problem J
预处理出$f[i]$表示从$i$开始的答案
$g[i]$表示从$1$开始到i的答案
把答案拆成$3$个部分。
如果把$x$位置的高度改成$y$,先找到$x - 1$时的答案,再判断$y$是否大于之前的最大值。
然后在二分跳到后面第一个大于$y$的位置$pos$,再加上预处理的$f[pos]$即可。
Problem K
三进制状压DP,状态$0$表示没有气球,$1$表示有气球但是尚未戳破,$2$表示有气球已经戳破了。
由此可以看出某一位的状态如果是$2$,那么一直都是$2$了。
首先把少的那一维弄成列。设$dp[i][mask]$为前$i$行转移完状态为$mask$的方案数。
然后依次枚举下来。首先对于第$i$行,我们可以选择在这一行中戳破气球,也可以选择不戳破这一行的气球。
如果选择不戳破这一行的气球,这一列有气球,那么该状态的位,需要从$0$变成$1$。
如果选择戳破这一行的气球,那么只要戳一个就行,枚举哪一个,把对应位上的状态变成2就可以了。
最后统计答案的时候状态里面不能有$1$,$2$的个数就是戳破气球的个数。
Problem L