会员专享
请先
登录,登录后可使用今日免费解锁;
开通会员,或
购买
该题目所属题库
,可解锁完整内容。
对于给定的字符串,算出字符串中 0 的个数、1 的个数,记 d 为 min{0的个数,1的个数,k}。在恰好 k 次操作中,只需要做 d 次有效交换:将从前往后数 d 个 1 与从后往前数 d 个 0 交换(代码中通过将前 d 个 1 变为 0、后 d 个 0 变为 1 实现)。剩余的 k−d 次对调可以通过交换两个数字相同的位置来消耗,不会改变最终序列。注意当 n=2 时,因为要恰好交换 k 次,所以当 k 为奇数时,01 这种字符串得交换一次成 10。
c++
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+10;