トピック:
文字列Aが与えられます。文字列Bを見つけます。ここで、Bは回文であり、AはBのサブシーケンスです。
文字列のサブシーケンスは、残りの文字の順序を変更せずに、いくつかの(必ずしも連続しているとは限らない)文字を削除することによって文字列から派生できる文字列です。たとえば、「cotst」は「contest」のサブシーケンスです。
回文は、同じ前方または後方を読み取る文字列です。
文字列Bの長さは最大104である必要があります。そのような文字列が常に存在することが保証されます。
最短の答えを見つける必要はありません。唯一の制限は、文字列Bの長さが104を超えてはならないということです。
入力
最初の行には、小文字のラテン文字で構成される文字列A(1≤| A |≤103)が含まれています。ここで、| A | はAの長さです。
出力
小文字のラテン文字のみで構成されるBを含む1行を出力します。最短の答えを見つける必要はありません。唯一の制限は、文字列Bの長さが104を超えてはならないことです。可能なBが多数ある場合は、それらのいずれかを印刷します。
例
inputCopy
aba
output
aba
inputCopy
ab
output
aabaa
注
最初の例では、「aba」は回文である「aba」のサブシーケンスです。
2番目の例では、「ab」は回文である「aabaa」のサブシーケンスです。
題名:
2つの文字列a、bがあります。aはbの部分文字列であり、bは回文文字列であることがわかっています。次に、文字列aを指定して、文字列bを見つけます。
アイデア:
ここでは、条件を満たすa bをランダムに出力するため、aの正と負を2回直接出力します。
コード:
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <cmath>
using namespace std;
const int N=1e5+10;
char a[N];
int main()
{
ios::sync_with_stdio(false);
int n;
while(cin>>a)
{
cout<<a;//正着输出一遍
for(int i=strlen(a)-1;i>=0;i--)//逆过来再输出一遍
cout<<a[i];
cout<<endl;
}
return 0;
}