题目
思路
这是一道比较简单的贪心题。
不断地分类讨论。哪一个小就加一,另一个就减一。如果两个都相等时,就判断下一个,有相同的就加一,另一个减一,如果都没有相同的,就随便加减。如果两个都为 $0$ 时,就直接输出 No 即可。
Code
代码有点长。额。
#include <bits/stdc++.h>
#define int long long
using namespace std;
int n,a,b,c;
string s[100005],ans;
signed main(){scanf("%lld%lld%lld%lld",&n,&a,&b,&c);for(int i=1;i<=n;i++)cin>>s[i];for(int i=1;i<=n;i++){if(s[i]=="AB"){if(a==0&&b==0) {puts("No");return 0;}if(a>b){b++,a--;ans+='B';}else if(a<b){b--,a++;ans+='A';}else{if(s[i+1]=="BC"){b++;a--;ans+='B';}else if(s[i+1]=="AC"){a++;b--;ans+='A';}else{a++;b--;ans+='A'; }}}if(s[i]=="AC"){if(a==0&&c==0){puts("No");return 0;}if(a>c){c++;a--;ans+='C';}else if(a<c){c--,a++;ans+='A';}else{if(s[i+1]=="AB"){a++;c--;ans+='A';}else if(s[i+1]=="BC"){c++;a--;ans+='C';}else{a++;c--;ans+='A';}}}if(s[i]=="BC"){if(c==0&&b==0){puts("No");return 0;}if(c>b){b++;c--;ans+='B';}else if(c<b){b--,c++;ans+='C';}else{if(s[i+1]=="AC"){c++,b--;ans+='C';}else if(s[i+1]=="AB"){b++;c--;ans+='B';}else{b++;c--;ans+='B';}}}}puts("Yes");for(int i=1;i<=n;i++){cout<<ans[i-1]<<"\n";}return 0;
}
如有问题,请指出错误。
谢谢!