A.美しい文字列

リンク:https://codeforces.com/contest/1265/problem/A

どの2つの連続した文字が同じでない場合は文字列が美しいと呼ばれています。「AAAAAA」、「ABAA」と「BB」はありませんしながら、例えば、「ababcb」、「」と「ABAB」は、美しい文字列です。

Ahclは、美しい文字列を構築したいと考えています。彼は唯一の文字 'A'、 'B'、 'C​​' とからなる、文字列SSを持っています '?'。Ahclは、各文字を交換する必要があります「?」3つの文字「A」、「B」または「C」の1、結果の文字列が綺麗になるようにと。彼を助けてください!

'?' | | Sより正式に、すべての文字を交換した後、条件SI≠SI + 1SI≠SI + 1すべての1≤i≤のために満たすべき-11≤i≤| | S -1、どこ| S || S | 文字列SSの長さがあります。

入力

テストケースの数 - 最初の行は、正の整数TT(1≤t≤10001≤t≤1000)を含みます。次TTラインは、テストケースの記述が含まれています。

各行は、文字だけ「A」、「B」、「C」からなる非空の文字列SSを含んでおり、「?」。

各テストケースには、文字列SSは、少なくとも一つの文字を持っていることが保証されています「?」。すべてのテストケース内の文字列SSの長さの合計が105105を超えていません。

出力

入力で与えられた各テストケースについては、次の形式で回答を印刷します。

  • それは美しい文字列を作成することは不可能である場合は、印刷「-1」(引用符なし)。
  • それ以外の場合は、すべての交換後に得られる美しい文字列を出力「を?」文字。複数回答がある場合は、それらのいずれかを印刷することができます。

入力

コピー

3 
A ??? CB 
A ?? BBC 
A?B?C

出力

コピー

ababcb 
-1 
acbac

注意

最初のテストケースでは、すべての可能な正解は「ababcb」、「abcacb」、「abcbcb」、「acabcb」と「acbacb」です。あなただけ置き換えることができるので、2つの答え「abcbab」と「abaabc」は、間違って「?」文字と結果の文字列は美しくなければなりません。

44番目と55番目の文字は常に等しくなりますので、第二のテストケースでは、美しい文字列を作成することは不可能です。

第3のテストケースでは、唯一の答えは、「acbac」です。

コード:

#include <bits/stdc++.h>
using namespace std;
long long n,c;
char x[1000001];
long long mod=10007;
int main()
{
	cin>>n;
	while(n--)
	{
		cin>>x;
		long long l=strlen(x);
		int f=1;
		x[l]='d';
		for(int i=0;i<l;i++)
		{
			if(x[i]=='?')
			{
				if(i>0&&i<l-1)
				{
					int flag=0;
					for(int j=0;j<=2;j++)
					{
						x[i]='a'+j;
						if(x[i]!=x[i-1]&&x[i]!=x[i+1])
						{
							flag=1;
							break;
						}
					}
					if(flag==0)
					{
						f=0;
						break;
					}
				}
				else if(i==0)
				{
					int flag=0;
					for(int j=0;j<=2;j++)
					{
						x[i]='a'+j;
						if(x[i]!=x[i+1])
						{
							flag=1;
							break;
						}
					}
					if(flag==0)
					{
						f=0;
						break;
					}
				}
				else if(i==l-1)
				{
					int flag=0;
					for(int j=0;j<=2;j++)
					{
						x[i]='a'+j;
						if(x[i]!=x[i-1])
						{
							flag=1;
							break;
						}
					}
					if(flag==0)
					{
						f=0;
						break;
					}
				}
			}
			else
			{
				if(x[i]==x[i+1])
				{
					f=0;
					break;
				}
			}
		}
		if(f==0)
		cout<<-1<<endl;
		else
		{
			for(int i=0;i<l;i++)
			cout<<x[i];
			cout<<endl; 
		} 
	}
}

 

公開された137元の記事 ウォン称賛15 ビュー9932

おすすめ

転載: blog.csdn.net/Luoriliming/article/details/103428220