外观
字典序
约 537 字大约 2 分钟
2024-10-13
🌳 题目描述:
小羊有一个长为 n 的只由 0 和 1 组成的串 s,他需要恰好对 s 执行 k 次交换操作。小羊想要使得 s 的字典序最小,请你帮帮他求出最小字典序的 s。选择两个不同的下标并交换这两个位置上的值称为一次交换,使用数学的方式描述,即选择和 i, j (1 ≤ i < j ≤ n) 并交换 si 和 sj。当且仅当满足以下条件之一时,字符串 a 按字典顺序小于字符串 b:
- a 是 b 的前缀,但是 a ≠ b
- 对于 a 与 b 的第一个不相同的位置,字符串 a 中的字母在字母表中的位置前于 b 中相应的字字母。
输入描述
每个测试文件均包含多组测试数据。
第一行输入一个整数 T (1 ≤ T ≤ 104) 代表数据组数,每组测试数据描述如下:
第一行输入两个整数 n 和 k (2 ≤ n ≤ 2×105 ;1 ≤ k ≤ 109)代表 s 的长度和操作次数。
第二行输入一个长为 n,且只由 '0' 和 '1' 组成的字符串 s。 除此之外,保证所有的 n之和不超过 2 ×105。
输出描述
对于每一组测试数据,在一行上输出一个长度为 n,且只由 0 和 1 组成的字符串,代表进行了恰好 k 次操作后,字典序最小的 s。
样例1
输入
2
6 2
110000
2 10
11
输出
000011
11
说明
对于第一组测试数据,需要恰好进行 k = 2 次操作,依次交换 s1,s6 和 s2,s5。
🕵🏽 面试评估:
这道题考察的是双指针和贪心,要求出进行 k 次交换后字典序最小。字典序最小的字符串意味着尽可能多的 '0' 排在前面,尽可能多的 '1' 排在后面。
🧗难度系数:
⭐️ ⭐️ ⭐️