【CF】2022四月CF之旅
咕咕咕咕咕咕,人菜就要多刷题。
1651E - Sum of Matchings
实在尽力了,,真的不会lol!!!!
先放在这里吧,后续补题。题意:一个二分图,每个点的度数为2,求所有二分的子图的最大匹配之和,n1500
div777 D. Madoka and the Best School in Russia
关于该题有一种特判分类讨论的做法,,,,,狗都不做
一种比较有启发性的想法是,在因数上做DP。在int范围以内,因数个数最多就是1600(反素数2095133040),而1e9以内最多就是1344个(735134400)。我们发现这个把beatuful数作为物品,其实就是一个在因数背包上跑的背包DP。这样时间复杂度也就是D^2(D为因数个数)。以后遇到类似的题,我们可以考虑在因数上映射到1->1344的下标后跑dp,这样时间复杂度便可接受了。
1647E - Madoka and the Sixth-graders
关于该题还是很有价值的。首先我们考虑数字不是消失,而是所有数字往后跳,然后在最后考虑其中最小的那一个数字,关于每个位置往后跳若干步最后在哪里的问题我们可以使用倍增实现。然后考虑到>n的数字其实除了计算轮数没有意义(很容易想到如何计算轮数),然后我们只需要考虑小于n的所有数。关于每个位置,有p1,p2,.....最终跳到了p这里来,那么其实就是说min(num[p1],num[p2].....)==pnum。那么我们使最小位置置为pnum。考虑完这个之后,我们用贪心的想法,从小到大考虑每一个未填的数字,然后如果这个数字在前面出现了,那么之后同样跳到位置的那些初始位置就可以填数了。如果没有出现,那么我们贪心选择其中最小的那个位置(使用set实现)。关于该题dls讲的非常好。
关于该题,我们考虑倒着来,如果C[n]恰好等于n那么说明这个a[i]一定就是1,因为所有贡献都来自其本身。由于我们可以开始就计算出1的总数,可以减去此时将Cn减去bn,那么我们得到的就是计算到N-1时候的C[n]。这样又可以计算此时的a[i]了。层层考虑,区间减用差分即可。
考虑这道题,答案只会是0,1,2(因为与序列是单调递减的那么如果出现mex==3,则序列需要2,1,0,而2不可能之后与出现1)。考虑之后如果连接的路径某一个bit全程有1,那么就说明答案min{mex}=0,否则如果U[i]有连接的偶数边,或者可以间接的(即在前多少个在k(k>1)位上为1,在后面的位上为0)连接偶数边,那么就说明mex==1,否则mex==2
考虑做法,我们设定一个暴力的dp,f[i]表示到第i个的最大答案。那么f[i]=f[i-1]+(1,0,-1 看数是多少),f[i] = max(f[i],f[j]+i-j)(其中sm[i]>sm[j])或者f[i]=max(f[i],f[j]) sm[i]=sm[j]。那么我们快速找到sm[i]>sm[j]的所有f[j]-j利用树状数组维护前缀最大值即可。