模拟测试57
Posted hz-rockstar
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模拟测试57相关的知识,希望对你有一定的参考价值。
T1:
贴心送分题。
对于每种颜色,如果多了,就会有多的数量除二的贡献,反之会有少的数量的需求。
最后判断贡献和需求哪个大即可。
时间复杂度$O(1)$。
T2:
边数太多,考虑将状态记录在点上。
每一种可行方案是一个dag,可以按照拓扑序列分层。
状态记录当前选中的集合,和最后一层的点的集合,然后枚举状态更新即可。
更新时算出当前集合向拓展集合连的边数,每个点至少要有一条入边。
考虑优化,省去第二维状态。
枚举补集的子集,算出当前集合向拓展集合连的边数,每条边都可以连或不连。
但是这样会算重,因为每次算出的方案并不一定能连接拓展集合的所有点。
根据点数容斥一下,奇加偶减即可。
注意枚举子集的内部不能再用循环算边数,从小到大枚举子集,做一个小的递推即可。
时间复杂度$O(3^n+m2^n)$
T3:
莫比乌斯反演神题。
$lcm$大于$n$的数对数不好求,考虑求$lcm$小于$n$的数对数。
设这样求出的数对数为$res$,那么答案可以表示为:
$ans=n^2-res$
考虑求$res$:
$\large \beginarrayll res &=& \sum \limits_i=1^n \sum \limits_j=1^n [lcm(i,j)<=n] \\ &=& \sum \limits_d=1^n \sum \limits_i=1^\lfloor \fracnd \rfloor \sum \limits_j=1^\lfloor \fracnid \rfloor [gcd(i,j)==1]*[ijd<=n] \\ &=& \sum \limits_d=1^n \sum \limits_i=1^\lfloor \fracnd \rfloor \sum \limits_j=1^\lfloor \fracnid \rfloor \sum \limits_g|gcd(i,j) \mu(g) *[ijd<=n] \\ &=& \sum \limits_d=1^n \sum \limits_g=1^\lfloor \sqrt \fracnd \rfloor \mu(g) \sum \limits_i=1^\lfloor \fracndg^2 \rfloor \sum \limits_j=1^\lfloor \fracnidg^2 \rfloor [ijdg^2<=n] \\ &=& \sum \limits_g=1^\sqrtn \mu(g) \sum \limits_d=1^\lfloor \fracng^2 \rfloor \sum \limits_i=1^\lfloor \fracndg^2 \rfloor \sum \limits_j=1^\lfloor \fracnidg^2 \rfloor [ijdg^2<=n]\endarray$
发现$d$,$i$,$j$并没有本质区别,于是我们可以假定$d<=i<=j$,然后再乘上排列数。
于是上界可以卡的更小。
$d$,$i$,$j$中两个数相等,排列数为3;三个数都相等,排列数为1;三个数都不等,排列数为6。
$\large \beginarrayll res &=& \sum \limits_g=1^\sqrtn \mu(g) \sum \limits_d=1^\lfloor \sqrt[3]\fracng^2 \rfloor \sum \limits_i=d^\lfloor \sqrt\fracndg^2 \rfloor \sum \limits_j=i^\lfloor \fracndig^2\rfloor [ijdg^2<=n] \\ &=& \sum \limits_g=1^\sqrtn \mu(g) \sum \limits_d=1^\lfloor \sqrt[3]\fracng^2 \rfloor \sum \limits_i=d^\lfloor \sqrt\fracndg^2 \rfloor (\lfloor \fracndig^2 \rfloor -i)*(3*[d==i]+6*[d!=i]) + ([d==i]+3*[d!=i])\endarray$
线性筛求莫比乌斯函数,然后枚举计算即可。
时间复杂度约为$O(n^\frac23)$
以上是关于模拟测试57的主要内容,如果未能解决你的问题,请参考以下文章