链接:
题意:给一个01串,可以交换相邻两个的位置k次问字典序最小的序列;
简单的贪心题,每次考虑把最小的往前放,最小只有零,找一下交换的代价即可;
code;
#include<bits/stdc++.h> using namespace std; const int maxn=10010; void solve() { int n; long long k; cin>>n>>k; vector<int> v; string s; cin>>s; for(int i=0; i<s.size(); i++) { if(s[i]=='0') v.push_back(i);//0 position } int la=-1; for(int i=0; i<v.size(); i++) { if(k>v[i]-la-1) { int cost=v[i]-la-1; k-=cost; v[i]=la+1;//记录交换次数 la=v[i]; } else { v[i]-=k; break; } } std::vector<int> ans(s.size(),1); for(int i=0; i<v.size(); i++) ans[v[i]]=0; for(int i=0; i<ans.size(); i++) cout<<ans[i]; cout<<endl; } int main() { int t; cin>>t; while(t--) solve(); return 0;
}