(贪心的想尽可能把前面的1变成0)
(那我们记录每个0的位置,每次遇到1就和后面最近的一个0交换)
(怎么交换?冒泡排序?我们发现我们要交换的1和0间都是1)
(所以直接swap()交换就行了,效果一样)
(注意k开long long)
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
string s;
int a[1000009],top,n; ll k;
int main()
{
int t;
cin>>t;
while(t--)
{
cin>>n>>k>>s;
top=0;
for(int i=0,l=s.length();i<l;i++)
if(s[i]=='0') a[++top]=i;
int last=1;
for(int i=0,l=s.length();i<l;i++)//开始模拟
{
if(s[i]=='0') last++;
else//'1'要和后面的0交换
{
if(last>top) continue;
if(a[last]-i>k) continue;
swap(s[a[last]],s[i]);
k-=(a[last]-i),last++;
}
}
cout<<s<<endl;
}
}