zoukankan      html  css  js  c++  java
  • D. Binary String Minimizing(贪心*1500)

    传送门的传说决赛

    (贪心的想尽可能把前面的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; 
    	}
    }
    
  • 相关阅读:
    第十一周作业
    第十周作业
    第九周编程
    第十二周作业
    第十一周作业
    第十周作业
    第八周作业
    第七周作业
    第五周作业
    2019春季学期第四周作业
  • 原文地址:https://www.cnblogs.com/iss-ue/p/12893567.html
Copyright © 2011-2022 走看看