题解:AT_abc166_f [ABC166F] Three Variables Game
思路
这是一道比较简单的贪心题。
不断地分类讨论。哪一个小就加一,另一个就减一。如果两个都相等时,就判断下一个,有相同的就加一,另一个减一,如果都没有相同的,就随便加减。如果两个都为 \(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;
}
如有问题,请指出错误。
谢谢!

浙公网安备 33010602011771号