SGU546

简介:   题意:给出一个只可能包含0,1,2的字符串,给定需要的0的个数a和需要的1的个数b,使用最少的替换次数得到目标串,输出交换次数。做法:简单模拟即可代码:     #include #include #include #include using namespace...
 

 

题意:给出一个只可能包含0,1,2的字符串,给定需要的0的个数a和需要的1的个数b,使用最少的替换次数得到目标串,输出交换次数。做法:简单模拟即可代码:

 

 

#include <algorithm>
#include <iostream>
#include <stdio.h>
#include <string>

using namespace std;

int main() {
    int n,a,b;
    string s;
    while(cin>>n>>a>>b>>s) {
        if(a+b>n) {puts("-1");continue;}
        int c = n-a-b, i;
        int x=count(s.begin(),s.end(),'0');
		int y=count(s.begin(),s.end(),'1');
		int z=count(s.begin(),s.end(),'2');
        int ans=0;
        for(i=0; i<n; i++){
            if(s[i]=='0' && x>a || s[i]=='1'&&y>b || s[i]=='2'&&z>c){
                ans++;
                if(s[i]=='0') x--;
                if(s[i]=='1') y--;
                if(s[i]=='2') z--;
                if(x<a){x++,s[i]='0';}
                else {
					if(y<b){y++,s[i]='1';}
					else if(z<c){z++,s[i]='2';}
				}
            }
        }
        cout<<ans<<endl;
        cout<<s<<endl;
    }
	return 0;
}


 

 

目录
相关文章
|
6月前
USACO1.3 修理牛棚
USACO1.3 修理牛棚
华为机试HJ103:Redraiment的走法
华为机试HJ103:Redraiment的走法
183 2
|
算法 测试技术
华为机试HJ67:24点游戏算法
华为机试HJ67:24点游戏算法
100 0
|
存储 测试技术 Windows
华为机试HJ19:简单错误记录
华为机试HJ19:简单错误记录
|
机器学习/深度学习 C++
华为机试HJ16:购物单
华为机试HJ16:购物单
|
算法
[USACO 2007 Jan S]Protecting the Flowers
[USACO 2007 Jan S]Protecting the Flowers
洛谷P2871-[USACO07DEC]Charm Bracelet S(01背包模板题)
洛谷P2871-[USACO07DEC]Charm Bracelet S(01背包模板题)
洛谷P2871-[USACO07DEC]Charm Bracelet S(01背包模板题)