题解:P14603 [NWRRC 2025] Defense Distance

· · 题解

下面设 a \le b \le c

首先,如果 a + b < c,那么肯定是无解的。否则,我们可以让 s = 'a'u = c + 1 'a'

那么 t 就可以是长度为 a + 1 且其中后 a + b - c 个字符为 'b',其他均为 'a' 的字符串。这样的构造满足题目条件。

代码

#include<bits/stdc++.h>
using namespace std;
int a,b,c,aa,bb,cc;
string s[3];
int main(){
    cin>>a>>b>>c;aa=a;bb=b;cc=c;if(aa>bb)swap(aa,bb);if(aa>cc)swap(aa,cc);if(bb>cc)swap(bb,cc);
    if(cc>aa+bb)cout<<"No",exit(0);
    s[0]=s[1]='a';
    for(int i=1;i<=cc+1;i++)s[2]+='a';
    for(int i=1;i<=cc-bb;i++)s[0]+='a';
    for(int i=1;i<=aa-cc+bb;i++)s[0]+='b';
    cout<<"Yes\n";
    if(a>=b&&b>=c)cout<<s[2]<<'\n'<<s[1]<<'\n'<<s[0];
    else if(a>=c&&c>=b)cout<<s[1]<<'\n'<<s[2]<<'\n'<<s[0];
    else if(b>=a&&a>=c)cout<<s[2]<<'\n'<<s[0]<<'\n'<<s[1];
    else if(b>=c&&c>=a)cout<<s[1]<<'\n'<<s[0]<<'\n'<<s[2];
    else if(c>=a&&a>=b)cout<<s[0]<<'\n'<<s[2]<<'\n'<<s[1];
    else cout<<s[0]<<'\n'<<s[1]<<'\n'<<s[2];
    return 0;
}