考试总结 模拟$107$

考试过程

看完题目感觉可做,心态没什么问题,T1正常思考,想到了一个伪的复杂度,以为只能过200的

但是造了组4000的发现超级快,然后就以为没有问题,就没有再看,现在想想真天真啊

T2感觉很可做显然是要分解质因数或者线筛什么的,但是1e9怎么分?

就先开了个桶,骗了20分,感觉贡献算少了,幸亏写了个对拍,

然后觉得不能一看T3就弃掉,仔细一看发现暴力dp好多分,又一看发现能有60分十分开心,又写了个对拍

幸亏最后看了眼T3,以后千万不能再凭经验做题了!

对于所有题目不要在深入思考前就妄下定论

lemon评测T3挂了!T3没有算空间啊啊啊!

第一次被卡了空间!!以后每一道题目都要去算空间复杂度!!!

题解

T1「贪心」「二分答案」

考场上觉得$k$次交换比较困难,于是就想到了要二分答案去验证是否小于等于k次

验证:枚举哪种字母,然后去看这种字母拼成$mid$长度的最小代价,从前往后去枚举每一段

现在的复杂度已经是$O(Nlog{N})$了

在去找最小次数的时候,由于没想着打正解,所以我考场上的做法是$O(N^2)$的,

首先有个贪心很常见的那种,中间点最优,那么是距离的中间点,还是字母的中间点呢?

题解的贪心:最终的形态中,必定有一段字母是不动的,所以字母的中间点不动一定不会更劣

然后$skyh$巨佬写了个前缀和就成$O(1)$ 的了。所以正解的O(N^2)的变成了$O(Nlog{N})$

T2「试除法」

反正是根号分解的思想,所以就暂且叫做试除法吧

70opts做法是,先用线筛筛出来根号内的所有质数,

对于每个a_i我们把它里面的所有平方因子给除去

最后省下的那些只有相等的才能做贡献

优化成100opts:

我们想少筛一点会发生什么,也就是只筛到$sqrt[3]{m}$

考虑最后剩下的数是x=p^2*k, $p > sqrt[3]{m}$

那么 $k > sqrt[3]{m}$也就是说k会在之前枚举到,那么我删去之后最后只会剩p^2了

具体实现:初始tmp=a_i,质因数我们只枚举到$sqrt[3]{m}$,

tmp和原数的平方因子干掉,剩下的单个因子,我们让x除去,

最后剩的x只会是p^2,然后删去就好了

T3「DP」「容斥」「组合数学」

n==0的情况显然是个组合数学,

d==2 $C(a1+a2,a1)$

d==3 $C(a1+a2+a3,a1) imes C(a2+a3,a2)$化简之后$(a1+a2+a3)!/(a1!*a2!*a3!)$

依次类推$sum {a_i}/ prod{a_i}$

n!=0的情况怎么办?我们考虑用合法的情况减去不合法的

f[i]表示考虑到第i个点的方案数,其中点0是A起点,n+1是B终点

$f[i]=cal(0,i)-sum{f[j]*cal(j,i)}$

$cal(j,i)$表示从j到i的方案数,j必须满足所有的d维都不大于i

原文地址:https://www.cnblogs.com/casun547/p/11828815.html