模拟测试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∪t][t]=∑in(j,t),i∩t==∅dp[i][j]∏pϵt(2cnt[has[p]∩j]−1)(2cnt[has[p]∩(i∧j)])
然而这样复杂度是O(4nn)的,考虑一下怎么优化
假设我们把dp第二维去掉,即dp[i]表示当前点集为i的方案数
由于我们仍然分层进行dp,不用考虑出环的情况,那就只剩下了方案重复的情况
考虑容斥,我们让每个sz为奇数的集合对答案加上贡献,为偶数的对答案减去贡献
因为对于点集i|j的一种连边方案,可以有多种方式划分成i,j,
这就意味着不同的i,j可能包含了同样的方案。
于是以j中包含的元素把并集为k的i和j分类
得到转移方程dp[i∪j]=∑i∩j==∅(−1)cnt[i]+1dp[i]∏p∈j2cnt[has[p]∩i]
复杂度O(3nn)
T3:太阳神
反演快忘干净的蒟蒻试图通过一道题来复习
由于>n的不好计算,我们计算<n的情况
n∑i=1n∑j=1[ijgcd(i,j)≤n]
=n∑d=1⌊nd⌋∑i=1⌊ndi⌋∑j=1[gcd(i,j)==1]
=n∑d=1⌊nd⌋∑i=1⌊ndi⌋∑j=1∑g∣gcd(i,j)μ[g]
=n∑d=1∑g=1μ[g]∑i=1∑j=1⌊nijdg2⌋
=√n∑i=1μ[i]∑a=1∑b=1∑d=1[abd≤ni2]
直接枚举i,a,b可以得到可行的d,通过积分可知复杂度为O(n23)
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步