题解 | CF297 / Codeforces Round 180 (Div. 1)
Codeforces Round 180 (Div. 1) 虚拟比赛题解,涵盖 A 至 E 题的题意、思路与总结。
未独立完成的题目
- C
- E
A
题意
给你两个01串a, b,定义 parity(str): 如果 str 中有奇数个 1,返回 1,否则返回 0。有两种操作
- 把
parity(a)附到a的最后 - 在a的前面删掉一个数
可以执行任意步操作,问你是否可以把a变成b。
题解
注意到如果a中有偶数个1,则1的数目不可能增多(如果a中有奇数个1,可以先在后面添上一个1,之后1的数目就不可能增多了)。并且通过合适的策略,可以把a变成任何一个1的数目小于等于它的01串。只要数一下a, b中1的数目即可。
总结
这题考场AC,并且重新思考时独立完成。
B
题意
有k种🐟,每种🐟都有一个重量,并且它们按照重量从小到大排序后有一个编号。Alice手上有n条🐟,Bob手上有m条🐟。给出Alice和Bob手上鱼的编号,问Alice手上的🐟的总重是否可以大于Bob。
题解
首先把这些编号离散化一下,再做个后缀和。从后往前扫,如果某个位置Alice手上的🐟的数量大于Bob了,我们就把这之后的🐟的重量全赋成INF,这之前的全赋成1。这样Alice手上的🐟的重量肯定大于Bob。
总结
这题考场AC,并且重新思考时独立完成。
C
题意
有一个数组s,包含n个互不相同的非负整数。让你分成两个数组a, b。使得
- 为非负整数
同时,要求a, b中重复出现的数分别不超过 。
题解
构造。把s数组排序后,
- a数组的前 填 ,b数组对应填。
- b数组的中间 填 ,a数组对应填
- b数组的最后 填 ,a数组对应填。
这样保证了a数组的前面和后面是两两不同的,b数组的中间和后面是两两不同的。
总结
这题还记得是分三段构造,但是构造策略没想出来,未独立完成。
D
题意
用k种颜色拼成一个 的地毯,同时对于每一对有公共边的方块给定了一个限制条件,要求它们同色或者不同色。这些限制条件只要满足 即可。如果可以构造,给出一种方案。
题解
这题给了 个颜色,实际上对于 的情况,只要两个颜色就可以了,并且总是可以构造。对于 的情况简单判一下 E 的数量是否超过总数的 。否则,注意到有 个限制条件,我们先满足 和 中较大的限制条件,再在剩下的条件中挑一部分满足。可以先翻转一下,保证 。然后行内全满足,上下的关系总可以满足一半以上(先钦定第一个块的颜色,如果发现这样填下来满足不了一半,把整行颜色反转,就可以满足一半以上了),加起来超过总数的 。
总结
独立完成。
E
题意
一个环上有2n个顶点。要求选择3条不重复的弦,在它们顶点处建6个熊洞,且每条弦的两个端点的距离(距离的定义是在环上经过的熊洞数,取较小值)相同,询问其方案数。
题解
三条弦总共有五种关系,其中2, 5是合法的。

但是2, 5的方案比较难算,考虑从总方案中减掉1, 3, 4的方案。
假设我们能处理出每条弦的左边和右边弦的数量,记为 ,对于类型1,答案就是 。把类型3和类型4一起计算。它们的共同点是从两条弦(对于类型3是顶上两条,对于类型4是竖着的两条)的角度观察,一条弦和自己相交,一条线和自己相离。那么情况数就是 (每种情况会被计算两次)。
现在问题是怎么计算 。设以弦 的角度观察(),如果弦 在自己左边(),则 , 或者 。否则,。这可以用二维偏序解决。复杂度 。
总结
未独立完成。