E. Two Small Strings(构造方法)

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

a b c a b c a b c a b c ( a b , b c , c a ) 那么重复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)一定有一种满足条件

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

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

n a , n b , n c , a a a b b b c c c n个a,n个b,n个c,aaabbbccc

n a , n c , n b , a a a c c c b b b n个a,n个c,n个b,aaacccbbb

b b b a a a c c c bbbaaaccc

b b b c c c a a a bbbcccaaa

c c c a a a b b b cccaaabbb

c c c b b b a a a cccbbbaaa

扫描二维码关注公众号,回复: 11499946 查看本文章
#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");
}

猜你喜欢

转载自blog.csdn.net/jziwjxjd/article/details/107729432