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;}