E. Two Small Strings(构造方法)

先 考 虑 如 果 s , t 之 一 是 a a , b b , c c 的 形 式 先考虑如果s,t之一是aa,bb,cc的形式 s,taa,bb,cc

那 么 重 复 a b c a b c a b c a b c ( 只 包 含 a b , b c , c a ) 那么重复abcabcabcabc(只包含ab,bc,ca) abcabcabcabc(ab,bc,ca)

或 重 复 a c b a c b a c b a c b ( 只 包 含 a c , c b , b a ) 一 定 有 一 种 满 足 条 件 或重复acbacbacbacb(只包含ac,cb,ba)一定有一种满足条件 acbacbacbacb(ac,cb,ba)

如 果 s , t 都 不 是 重 复 的 字 母 如果s,t都不是重复的字母 s,t

那 么 有 6 种 构 造 , 分 别 是 a b c 的 6 种 全 排 列 那么有6种构造,分别是abc的6种全排列 6,abc6

n 个 a , n 个 b , n 个 c , a a a b b b c c c n个a,n个b,n个c,aaabbbccc na,nb,nc,aaabbbccc

n 个 a , n 个 c , n 个 b , a a a c c c b b b n个a,n个c,n个b,aaacccbbb na,nc,nb,aaacccbbb

b b b a a a c c c bbbaaaccc bbbaaaccc

b b b c c c a a a bbbcccaaa bbbcccaaa

c c c a a a b b b cccaaabbb cccaaabbb

c c c b b b a a a cccbbbaaa cccbbbaaa

#include <bits/stdc++.h>
using namespace std;
bool isok(string s,string q,string w)
{
	if( s==q||s==w )	return false;
	return true;
}
int n;
string s,t,ab="ab",ac="ac",ba="ba",bc="bc",ca="ca",cb="cb";
void print(string s)
{
	for(int i=1;i<=n;i++)	cout << s[0];
	for(int i=1;i<=n;i++)	cout << s[1];
	for(int i=1;i<=n;i++)	cout << s[2];
	exit(0);
}
int main()
{
	cin >> n >> s >> t;
	cout << "YES" << endl;
	if( s=="aa"||s=="bb"||s=="cc" )
	{
		if( t!=ab&&t!=bc&&t!=ca )	for(int i=1;i<=n;i++)	cout << "abc";
		else	for(int i=1;i<=n;i++)	cout << "acb";
		return 0;
	}
	if( t=="aa"||t=="bb"||t=="cc" )
	{
		if( s!=ab&&s!=bc&&s!=ca )	for(int i=1;i<=n;i++)	cout << "abc";
		else	for(int i=1;i<=n;i++)	cout << "acb";
		return 0;
	}
	if( isok(s,ab,bc)&&isok(t,ab,bc) )	print("abc");
	if( isok(s,ac,cb)&&isok(t,ac,cb) )	print("acb");
	if( isok(s,ba,ac)&&isok(t,ba,ac) )	print("bac");
	if( isok(s,bc,ca)&&isok(t,bc,ca) )	print("bca");
	if( isok(s,ca,ab)&&isok(t,ca,ab) )	print("cab");
	if( isok(s,cb,ba)&&isok(t,cb,ba) )	print("cba");
}
©️2020 CSDN 皮肤主题: 1024 设计师:上身试试 返回首页