模拟测试20191002
好像一年没写题解了
这次考试好像从开考10min后就没有分了?
T2用错误的题意和错误的代码得出了样例,偷税然鹅爆零了
T3只会打暴力,试着反演然而第一不会证复杂度第二反演已经快忘干净了
T1:天空龙
%%%kx
T2:巨神兵
题意大概就是求构成DAG的方案数
既然是DAG理所当然的想到分层
设$ dp[i][j] $表示当前点集为i,最后一层为j的方案数
令$ in(i,j) $表示j中的点都和i中的点有边,$ has[i] $表示能直接到i的点,$ cnt[i] $表示i中1的个数
那么$ dp[i\cup t][t]=\sum \limits_{in(j,t),i\cap t== \varnothing }dp[i][j]\prod \limits_{p\epsilon t}(2^{cnt[has[p]\cap j]}-1)(2^{cnt[has[p]\cap (i \wedge j)]}) $
然而这样复杂度是$ O(4^{n}n) $的,考虑一下怎么优化
假设我们把dp第二维去掉,即$ dp[i] $表示当前点集为i的方案数
由于我们仍然分层进行dp,不用考虑出环的情况,那就只剩下了方案重复的情况
考虑容斥,我们让每个sz为奇数的集合对答案加上贡献,为偶数的对答案减去贡献
因为对于点集i|j的一种连边方案,可以有多种方式划分成i,j,
这就意味着不同的i,j可能包含了同样的方案。
于是以j中包含的元素把并集为k的i和j分类
得到转移方程$ dp[i\cup j]=\sum \limits_{i\cap j==\varnothing }(-1)^{cnt[i]+1}dp[i]\prod \limits_{p\in j }2^{cnt[has[p]\cap i]} $
复杂度$ O(3^{n}n) $
T3:太阳神
反演快忘干净的蒟蒻试图通过一道题来复习
由于>n的不好计算,我们计算<n的情况
$\sum \limits_{i=1}^{n}\sum\limits_{j=1}^{n}[ \frac{ij}{gcd(i,j)}\leq n ]$
=$\sum\limits_{d=1}^{n}\sum \limits_{i=1}^{\left \lfloor \frac{n}{d} \right \rfloor}\sum\limits_{j=1}^{\left \lfloor \frac{n}{di} \right \rfloor}\left [ gcd(i,j)==1 \right ]$
=$\sum\limits_{d=1}^{n}\sum \limits_{i=1}^{\left \lfloor \frac{n}{d} \right \rfloor}\sum\limits_{j=1}^{\left \lfloor \frac{n}{di} \right \rfloor} \sum \limits_{g\mid gcd(i,j)}\mu [g]$
=$\sum \limits_{d=1}^{n}\sum\limits_{g=1}\mu [g]\sum \limits_{i=1}\sum \limits_{j=1} \left \lfloor \frac{n}{ijdg^2} \right \rfloor$
=$\sum \limits_{i=1}^{\sqrt{n}}\mu [i]\sum \limits_{a=1}\sum \limits_{b=1} \sum \limits_{d=1}[abd\leq \frac{n}{i^{2}}]$
直接枚举i,a,b可以得到可行的d,通过积分可知复杂度为$ O(n^{\frac{2}{3}}) $