Processing math: 100%

模拟测试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[it][t]=in(j,t),it==dp[i][j]pϵt(2cnt[has[p]j]1)(2cnt[has[p](ij)])

然而这样复杂度是O(4nn)的,考虑一下怎么优化

假设我们把dp第二维去掉,即dp[i]表示当前点集为i的方案数

由于我们仍然分层进行dp,不用考虑出环的情况,那就只剩下了方案重复的情况

考虑容斥,我们让每个sz为奇数的集合对答案加上贡献,为偶数的对答案减去贡献

因为对于点集i|j的一种连边方案,可以有多种方式划分成i,j,

这就意味着不同的i,j可能包含了同样的方案。

于是以j中包含的元素把并集为k的i和j分类

得到转移方程dp[ij]=ij==(1)cnt[i]+1dp[i]pj2cnt[has[p]i]

复杂度O(3nn)

 

T3:太阳神

反演快忘干净的蒟蒻试图通过一道题来复习

由于>n的不好计算,我们计算<n的情况

  ni=1nj=1[ijgcd(i,j)n]

  =nd=1ndi=1ndij=1[gcd(i,j)==1]

  =nd=1ndi=1ndij=1ggcd(i,j)μ[g]

  =nd=1g=1μ[g]i=1j=1nijdg2

  =ni=1μ[i]a=1b=1d=1[abdni2]

直接枚举i,a,b可以得到可行的d,通过积分可知复杂度为O(n23)

posted @   mikufun♘  阅读(165)  评论(8编辑  收藏  举报
点击右上角即可分享
微信分享提示