• Codeforces Round #598 (Div. 3) D. Binary String Minimizing (贪心)


    链接:

    题意:给一个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;
    }
  • 相关阅读:
    Bubble Sort (5775)
    Dertouzos (5750)
    codeforces 360 E
    codeforces 360 D
    codeforces 360 C
    Mike and Cellphone
    训练2——B
    训练1——A
    符号三角形
    Sudoku Killer
  • 原文地址:https://www.cnblogs.com/sweetlittlebaby/p/12709873.html
Copyright © 2020-2023  润新知