TSG LIVE! 14 プログラミングコンテスト
コンテスト日時
2025/05/25 (Su) 16:00 - 17:40

M - 01 Substrings

ผักชี
5
s
1024
MB
650

問題文

各文字が 01 からなる長さ $N$ の文字列 $S$ と整数 $K$ が与えられます。
この文字列に対して以下の操作を行うことを考えます。

  • $S$ を $N-K$ 個の部分文字列に分割する。この分割は長さ $1$ の文字列が $N-2K$ 個、長さ $2$ の文字列が $K$ 個となるように分割する必要がある。その後、分割した部分文字列を並び替えて連結し、新しく文字列を作る。

操作によって作られる文字列のうち辞書順最小のものを求めてください。

$T$ 個のテストケースが与えられるので、それぞれについて答えを求めてください。

制約

  • $1\le T$
  • $2\le N$
  • $\displaystyle 0\le K\le \frac N2$
  • $S$ は 0 および 1 からなる長さ $N$ の文字列
  • 全てのテストケースに対する $N$ の総和は $5\times 10^5$ 以下

入力

入力は以下の形式で与えられる。

$T$
$\text{case}_1$
$\text{case}_2$
$\vdots$
$\text{case}_T$

各テストケース $\text{case}_i$ は以下の形式で与えられる。

$N$ $K$
$S$

出力

$T$ 行出力せよ。
$i$ 行目には、 $\text{case}_i$ に対する答えを出力せよ。

入力例 1
3 5 2 10110 5 1 10110 8 3 11010010
出力例 1
01011 00111 00001111
提出
C++23 (g++ 12.2.0)