T1:Reverse
如果直接暴力建图跑bfs时空复杂度都是$O(n^{2})$的,考虑怎么优化bfs的过程
我们发现主要瓶颈在于有许多点被扫到了多次
考虑用一个set存剩下的点,
由于每个点能走到的点在相同奇偶性下是连续的,我们把奇数和偶数分开来存
每次用一个点扩展时找到他能走的区间,把这些点从set里删掉就好了
注意区间范围
复杂度$O(nlogn)$
T2:Silhouette
我至今都对于自己考试时能想出来这个容斥而惊讶
我们显然的发现a和b的顺序对答案没有影响
考虑把两个数组排序
通过手模(打表)我们发现每个点能控制的是一个L形
但是L形不好统计,由于L可以分成两个矩形,考虑一个矩形怎么统计答案
设$S$,表示当前的$min(a,b)$,$f[i]$表示当前至少有i行不满足的方案数
则有$ f[i]=C_{a}^{i}\times (s^{i}\times ((s+1)^{a-i}-s^{a-i}))^{b} $
$ans=\sum_{i=0}^{a}(-1)^{i}\times f[i] $
那么一个L形也就很显然了
有$ f[i]=C_{a}^{i}\times (s^{i}\times ((s+1)^{a+c-i}-s^{a+c-i}))^{b}\times (s^{i}\times (s+1)^{a-i})^{d} $
T3:Seat
大神题,我不会