1 条题解
-
0
题目分析
我们有一个长度为 ( 为偶数)的二进制字符串。
对于每一对对称位置 ,如果两个字符相同,则称为“好对”。
总共有 对这样的位置。我们可以任意重排字符串中的字符,问是否能恰好得到 个好对。
核心思路
1. 统计字符数量
设字符串中
0的数量为 ,1的数量为 ,则
2. 最少好对数量
为了尽可能少的好对,我们把所有相同字符尽量放在不同的对称位置上。
一种构造方法:
- 把所有
0放在字符串前面,所有1放在后面。
此时,中间有一部分是0和1交错的位置,那里会形成好对。
更精确地:
令 ,。
总共有 对对称位置。
如果我们把 个多的字符尽量放在不同的对称对中,那么这些对中有些会两个字符相同,有些不同。最终得到的最小好对数为:
推导:
- 设 。
- 因为多出的 个字符必须与另一端的字符相同(否则就会形成不同对),这些 对就自动是好对。
- 其余部分可以安排成全部不同,从而不增加好对。
例子:
,,确实至少 1 个好对。
3. 最多好对数量
为了最多好对,我们把相同的字符尽量放在一起,让对称位置字符相同。
每一对对称位置可以放两个相同字符。
所以:0可以组成 个全 0 对1可以组成 个全 1 对
因此最大好对数为:
$$mx = \left\lfloor \frac{c_0}{2} \right\rfloor + \left\lfloor \frac{c_1}{2} \right\rfloor $$
4. 可达到的 的条件
必要条件:
但这是否充分?
不是,例如
,
我们可以得到 0 个好对(0101)和 2 个好对(0011),但不能得到 1 个好对。为什么?因为每次交换两个字符(即重排),好对数量的变化只能是 或 。
变化量为偶数 的原因:
考虑交换两个不同对称对中的字符:- 如果交换的两个字符相同,好对数不变。
- 如果交换的两个字符不同,好对数变化为 ±2(因为两个对称对的状态同时改变)。
因此,从最小好对数开始,每次可以增加 2,所以所有可达的好对数与 的差必须是偶数。
5. 最终条件
综上, 可达当且仅当:
算法步骤
- 统计 和 。
- 计算 。
- 计算 。
- 如果 且 是偶数,输出
"YES",否则"NO"。
时间复杂度: 每个测试用例。
总复杂度:。
示例验证
例 1
s = 000000→
→ NO例 2
s = 01→
→ NO例 3
s = 1011→
, 偶数 → YES例 4
s = 1101011001→
, 奇数 → NO例 5
同上,
, 偶数 → YES例 6
s = 11→
, 偶数 → YES - 把所有
- 1
信息
- ID
- 6583
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 1
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者