cf round 598div3 D.Binary String Minimizing
题目:https://codeforces.com/contest/1256/problem/D
题意:给你长度为n的01串,能将任意两相邻字符交换k次,求最小字典序的交换结果。
思路:贪心...甚至不用二分...贴一发简短的代码
#include<bits/stdc++.h> using namespace std; const int maxn=1e6+10; int main() { int T; scanf("%d",&T); while(T--) { int n,p=0; long long k; char ch[maxn]={0}; scanf("%d%lld",&n,&k); scanf("%s",ch); for(int i=0;i<n;i++) { if(ch[i]=='0') { if(k>i-p)swap(ch[i],ch[p]),k-=i-p; else {swap(ch[i],ch[i-k]);break;} p++; } } printf("%s\n",ch); } return 0; }