zoukankan      html  css  js  c++  java
  • Codeforces 1256D Binary String Minimizing

    思路:

    1.每输入进来一个0,看它是否能移动到最前端(前面不存在字符‘1’即为最前端),计算所需要的移动次数,和k做比较;
    2.k够用就输出一个0;不够的话计算最多能移动到哪,输出相应数量的1,再输出这个0,再输出剩下的1,然后既然k用完了,接下来输入什么就输出什么;
    3.输入输出的数据量较多,可以考虑优化一下cin和cout,或者直接用scanf和getchar;

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    #define rp(i,n) for(int i=0;i<n;i++)
    #define rpn(i,n) for(int i=1;i<=n;i++)
    const int MAX_N=1000005;
    int main(){
    	int q;
    	scanf("%d",&q);
    	rp(i,q){
    		ll n,k;
    		scanf("%lld %lld",&n,&k);
    		getchar();
    		ll ans=0;//统计当前0的个数 
    		bool flag=false;//k是否被用完 
    		rp(j,n){
    			char c=getchar();
    			if(flag) putchar(c);
    			else if(c=='0'){
    				ll d=j-ans;//移到最前面所需要的次数 
    				if(k<=d){//k被用完了,不够0被移到最前面 
    					ll pos=j-k;
    					for(pos=ans;pos<j-k;pos++) putchar('1');
    					putchar('0');
    					for(pos++;pos<j+1;pos++) putchar('1');
    					flag=true;					
    				}else putchar('0');	//k足够此次的0被移到最前端					
    				ans++;
    				k-=d; 
    			}
    		}	
    		if(k>0) for(int pos=ans;pos<n;pos++) putchar('1');//k没有被用完 
    		putchar('
    ');
    	}
    	return 0;
    }
    
  • 相关阅读:
    monitor system
    monitor disk
    manage account
    windows
    backup daily
    shell 脚本编程概述
    OGNL表达式
    Struts2各个功能详解(2)-输入校验和拦截器
    struts2各个功能详解(1)----参数自动封装和类型自动转换
    Struts2源码解析2
  • 原文地址:https://www.cnblogs.com/yuhan-blog/p/12308903.html
Copyright © 2011-2022 走看看