模拟测试20191004

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

大神题,我不会

猜你喜欢

转载自www.cnblogs.com/mikufun-hzoi-cpp/p/11622444.html