题解 | solution for all

Cidoai的幂次序列

https://ac.nowcoder.com/acm/contest/88880/A

很抱歉带给了大家不好的体验。C是很典的原,D假了。这场应该会 unrated。

A:输出 即可。

B:将 减去 ,对于非正整数 将其对应的 直接贡献到答案内,非正整数 的绝对值之和记为 。对于剩下的对,问题即转化为 01 背包问题。时间复杂度

C:这道题与树上独立集计数等价。设 表示点 是否与树外点有连边时的子树连边方案数。转移如下

即可。

D:题目假了,想的是并查集+trie。但是实际上我们考虑题目的表述为存在性表述。我们将任意两个相似的歌曲连一条边,可以发现题目要求的实际上是 的较小值。

E:

实际上需要将题目的 限制进行一定的转化。

我们对每个位置 分别考虑其 值是否满足题目要求。

  1. 时,明显两个条件都满足。

  2. 假设有两个位置 ,当 时,可以满足第二个条件。假设 ,则需要满足

因此我们可以设一个序列 表示第 个点是否被确定,被确定则设为 ,否则设为 。我们只有当 找到了与其匹配的 后才将 标记为 。由上面的分析可得,我们只需要考虑 其中的连续三个点的转移。

但我们又注意到:

000 是明显不合法的,因为第一个 0 不可能再找到与其匹配的位置。

同样的,第一位数为0的都不合法。

所以实际上我们只需要考虑连续两个点的转移,确定当前数是否与前面的数进行匹配,还是留空,如下:

00 -> 101 -> 01
01 -> 111 -> 11
10 -> 100 -> 00
10 -> 101 -> 01
10 -> 111 -> 11
11 -> 110 -> 10
11 -> 111 -> 11

因此我们答案可用矩阵快速幂计算得到。

对于不同的 都有不同的矩阵。时间复杂度为

考虑预处理出每个矩阵的 2 的幂次的位置,即 。这个 trick 可见 NOI2020d1A。

时间复杂度优化为

F:

因此题目所求即可转化为

经过莫比乌斯反演,即有

再次化简,可以得到

对两个中括号内分别化简,可以得到

因此原式可化为

不妨假定 ,又特殊考虑 的情况,则有

我们求解

可以得到

,则式子可简写为

注意到仅当 ,因此有答案为

总时间复杂度为

全部评论
D题是假了,但现在的真实数据下,还是有假了的做法,如果没有任何可以配对的,应该输出n对吧,但有人输出 n+1也能过。比如https://ac.nowcoder.com/acm/contest/view-submission?submissionId=71349742,比如https://ac.nowcoder.com/acm/contest/view-submission?submissionId=71349448
点赞 回复 分享
发布于 2024-09-16 18:17 广东
F 好卡常
点赞 回复 分享
发布于 2024-09-14 09:22 上海
E是2022浙江高联预赛P12的强化版吧
点赞 回复 分享
发布于 2024-09-14 08:09 浙江
能给点D题的hack数据吗,不是很理解为什么错了
点赞 回复 分享
发布于 2024-09-13 23:31 湖南

相关推荐

03-24 17:45
门头沟学院 C++
一个头三个大:我也是这样,状态持续了十天然后今天上午流程结束了,应该是横向对比挂了
点赞 评论 收藏
分享
评论
6
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务