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;
} 
posted @ 2019-11-11 19:54  myrtle  阅读(128)  评论(0编辑  收藏  举报