Pinely Round 2 (Div. 1 + Div. 2)
A. Channel
题意: 最开始网上有 个人,共 次改变,每一次有一个人加入或离开。总共 个人,求这 个人是否都上过网,有没上过网的,都有可能。
思路:
贪心地每次选取尽可能多和少的人即可。
B. Split Sort
题意: 给定一个排列,每次可以选取一个数 ,将排列划分成小于 部分组成的子序列和大于等于 部分组成的子序列。求最少多少次操作排列会变成 。
思路:
如果 在 后面则必须有一次操作 ,显然这也是充分的。
C. MEX Repetition
题意: 给定一个 长度序列 两两不同且都在 ,一次操作是按照 的顺序每次让 ,求 此操作后的序列。
思路:
最重要的是读题,我们注意到恰好一个数没有被使用,这意味着第一次操作第一个数会变成这个数,第二个数变成第一个数。
所以实际上就是在数组前面加上这个数然后求一个循环位移。
D. Two-Colored Dominoes
题意: 一个 的棋盘上面有一些多米诺骨牌,现在将每一个牌的两个格子染成黑色和白色,要求每一列和每一行黑格子白格子数量相等。构造方案或判断无解。
思路:
首先我们发现竖着的对列没有影响,所以实际上就是要求每一列只考虑横着的有偶数个,行同理。
所以判断加构造即可。
E. Speedrun
题意: 现在有 个任务,第 个任务需要在某一天第 小时完成,一天有 个小时,还有 对限制(不构成环),要求 在 之前完成。
现在求最后一个任务完成时间减去第一个任务完成时间的最小值。
。
思路:
显然如果确定第一个任务是什么就能拓扑排序求出最后任务的最早时间。
但是样例提示我们所有入度为 0 的点不一定就是最小的开始。
我们观察发现应该是一个前缀错后一天,我们考虑其会造成什么影响。
如果一个点出发能到终点且是最长路,那么如果这个点错后一天就会导致终点的答案错后一天。
于是我们倒着求一遍得出每个点能到达的最长路的终点,这样就可以枚举判断了。
F. Divide, XOR, and Conquer
题意:
给定 长度序列 ,一次划分是选择一个分界点,保留剩余部分异或和大的部分。对于每个 求最后是否能变成 。
。
思路:
好题好题好题。
最朴素的想法显然是区间 dp,设 表示 是否可行。
现在问题变成找到哪些地方可以转移。
注意到如果 ,则 的前导 不重要,因为 无论是什么和 都一样,但是 的最高位必须有 哪一位也是 。
所以不妨记录 表示可行的区间 的所有最高位的或结果,转移的时候只用看一下按位与不是 即可。
注意需要用内置函数 __lg
来快速计算。
G. Swaps
题意: 给定序列 ,一次操作定义为交换 。求进行任意次操作后的所有可能的序列个数,对 取模。
。
思路:
最后一题永远是作业,而且都是被我看过一遍然后鸽了的题
转化成基环树,让 连边。
现在操作变成 变成 ,这里要求 。也就是如果是自环就不能操作。
显然一次操作中间的点变成自环,可以看成删去了这个点。
现在我们考虑如何计数,由于是在基环树上,我们可以先把每个环上的点的对应子树计算出来。
不妨设 表示 的子树内, 是否被删去,我们不难得出转移:
设 的儿子个数是 ,则其实 。
不难发现二者成对出现,记 我们加起来就会得到 。
现在不妨考虑环上的问题,我们还是进行一个 dp,不妨设 表示考虑到环上第 个点,是否被删去,设 表示环上的第 个点,转移如下:
同理,加起来就能得到:
但是这样会导致可能一个点转了一圈把自己也删了,所以我们需要减去这种情况,方案数为:
考虑到 ,所以如果设 ,贡献就是 。
这样就可以在 时间解决这个问题。
官方题解的组合意义是考虑打标记,有点人类智慧。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具