SGU546

来源:互联网 发布:浅谈软件项目风险管理 编辑:程序博客网 时间:2024/06/06 00:01

题意:给出一个只可能包含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;}


原创粉丝点击