【日总结】2022.11.20
持续更新 做了多少东西就放多少东西)
次小质因子前缀和
【UR #13】Sanrd
设 \(f(x)\) 为 \(x\) 的次大质因子,若 \(x\) 为质数或 \(1\) 则 \(f(x)=0\),求 \(f(x)\) 的前缀和。\(x \le 10^{11}\)
考虑 min_25 筛:首先先看一般 min_25 筛的式子,看看我们需要做什么。
那么我们考虑 \(f(x)\) 怎么去求:首先对于前面的质数处的点值肯定为 \(0\),而考虑每次消一个质因子的贡献。对于形如 \(f(p_k^e\times \cdots)\) 的数,我们枚举了一个质因子,假如现在除去这个质因子就仅剩下一个质数了,那么这个数就一定是质因子,否则当前这个数就没贡献,\(f(x)=f(\frac{x}{p_k^e})\);对于形如 \(p_k^{e+1}\) 的数,答案就是 \(p_k\)。那么我们就可以将 min_25 的式子改写为以下形式:
然后直接套 min_25 筛的板子就做完了。
「LibreOJ Round #11」Misaka Network 与求和
随便推一下式子,发现题目要求的就是 \(f^k * \mu\) 的前缀和。
显然考虑杜教筛,卷一个 \(I\) 即可消去 \(\mu\),然后再求 \(f^k\) 的前缀和,这部分直接套用上面的做法即可。
有向图判环
昨晚上想了一下,然后补一下昨天的那个判环算法。
对于每一条边,判断是否存在包括 \(u-v\) 边的环。
可以从每个点开始,考虑每个点最靠左能被哪个点到达,最靠右能被哪个点到达,这个可以直接从左到右 DFS,再从右到左 DFS 做到。然后如果这个点最靠左只能是从自己到达,最靠右也只能从自己到达,那这就不存在包含这条边的环。
杂题
[ARC149E] Sliding Window Sort
昨晚上写这个题的题解,把代码复制到洛谷博客上之后电脑黑屏了。
然后就不打算再写一遍了,太恶心了。
但是毕竟是没看题解做出来的题,还是要写一个大致做法纪念一下。
手模一下发现这东西类似于一个小根堆加一个队列,每次操作相当于弹出堆顶放到队列尾,然后将队列首插入堆。
发现这样的操作操作若干次后,比较大的数就永远在堆的底下了,每次只会将堆顶与队列进行循环。这样我们可以通过终止状态推出 \(k\) 较小时候的状态。这时候就可以把原题的环上问题变成链上问题了。如果 \(k\) 比较小,发现序列的最后几个数就是没有用的,可以直接删掉,总之我们可以将任意问题转换成 \(k=n-m+1\) 的情况。
然后计数这东西可以考虑一下加数的过程,如果现在的数比堆中的数要小,那肯定这个数是新加进去的,就只能放在最后一位,否则这个数可以是之前堆里就有的也可以是在最后一位新加进去的。设后者的数量有 \(t\) 个,那么答案就是 \(m^t(m-1)!\)。\((m-1)!\) 是因为还有 \(m-1\) 个数没填,这几个数可以任意填。
另外还需要判断一下是否无解。
[ARC150D] Removing Gacha
好题?
首先根据期望的线性性,答案应该就是每个点被选多少次之后成为好点的期望值的和。
于是我们单独来考虑一个点,那么这个点成为好点当且仅当这个点到根的路径都被选择过了。这个是经典赠券收集问题,答案就是 \(\sum_{i=1}^n\frac{n}{i}\),那么其中一个点被选中的期望次数就是 \(\sum_{i=1}^n\frac{1}{i}\)。
于是处理出来每个点的深度,然后预处理出来调和级数,就可以求答案了。
lyin 说这是经典结论,事实证明我做题确实还是太少了。
[ARC147D] Sets Scores
钓鱼题)
题意可以转化成:有一个长度为 \(m\) 的 01 串,进行 \(n-1\) 次操作,每次翻转一位,定义这样的初始串与操作序列的权值为最后得到的 \(n\) 个 01 串中每一位的 1 的数量的乘积。
感觉给定一个操作序列求权值这件事情就很困难,但是注意到是对所有方案求和,那么我们考虑对于某一种操作序列,将所有的初始 01 串的权值和加起来。发现如果 01 串的某一位初始为 0 与 1,其这一位的 1 的数量加起来正好是 \(n\)。那么其实对于所有的 01 串,权值和就是 \(n^m\),而操作序列有 \(m^{n-1}\) 种,那么答案就是 \(n^mm^{n-1}\)。
这个数据范围给的怎么看怎么像是 \(O(n)\) 或 \(O(n\log n)\) 的 DP,想了半天才想到直接把所有方案全加起来,太钓鱼了。
思考要不要去做难度高于 3000 的题,感觉做了没啥意义,自己啥也想不出来还浪费时间..?
发现了好东西:emoji
测试:🤔 😅