【OpenJ_Bailian - 2192】ジッパー

ジッパー


説明:

3つの文字列を考えると、あなたは3番目の文字列は、最初の二つの文字列の文字を組み合わせることによって形成することができるかどうかを判断します。最初の二つの文字列を任意に混合することができますが、それぞれが元の順序に滞在しなければなりません。 
例えば、「猫」と「木」から「tcraete」を形成考える: 
文字列A:猫の 
文字列B:木の 
文字列C:tcraete 
あなたが見ることができるように、我々は二つの文字列から文字を交互に3番目の文字列を形成することができます。第2の例として、「猫」と「木」から「catrtee」を形成する検討: 
列A:猫の 
文字列B:ツリーの 
文字列C:catrteeは 
最後に、通知は、「猫」と「木から「cttaree」を形成することは不可能であること」。 
入力

入力の最初の行は、それが従うべきデータセットの数を表す1000を介して1からの単一の正の整数を含んでいます。各データ・セットの処理は同じです。データセットは、次の行に行ごとに1つのデータセットを表示されます。 
各データセットについて、入力のラインは、単一のスペースで区切られた3つの文字列からなります。すべての文字列は、大文字と小文字のみで構成されています。3番目の文字列の長さは、常に最初の二つの文字列の長さの和です。最初の2つの文字列が包括的、長さ1〜200文字を持っています。 
出力

各データセットは、印刷のために: 
はい:データは、nを設定する 
第三の列は最初の二つから形成することができる場合、または 
データがNを設定:いいえ 
、それができない場合。もちろん、Nはデータセット番号に置き換える必要があります。たとえば、以下のサンプル出力を参照してください。 
サンプル入力

3

猫の木tcraete

猫の木catrtee

猫の木cttaree

サンプル出力

データは、1セット:はい

データは、2セット:はい

データは、3セット:なし

 トピックリンク:

https://vjudge.net/problem/OpenJ_Bailian-2192

問題の意味:与えられた3つの文字列、A、B、C AとBとCに等しい長さ 文字列A、文字のBによって文字列Cかどうかを判断します。必要な場合、Cの文字として、元の文字AとBだけでなく、文字列の元の文字の順序を維持します。

最初のj個の文字に前方及びB A i番目の文字は、iがj個の文字を+ Cする前に形成することができると仮定する。次いで、最初のi + + 1つの文字またはjの場合、i番目の文字と以前のI + 1つの文字及びBである場合、B、A、Cに、第j個の文字が構成されてもよい+ 1の前に第一J文字Cは、前のI + J + 1文字で形成することができます。そして、明らかにC iは、AとBは、前のI + J + 1文字の構成では文字列であり、文字列の前にJ + 1を+。バーコードに直接何も言うことはありません

ACコード

1の#include <iostreamの>
 2の#include <cstdioを>
 3の#include <fstreamの>
 4の#include <アルゴリズム>
 5の#include <cmath>
 6の#include <両端キュー>
 7の#include <ベクトル>
 8の#include <キュー>
 9# <含む文字列 >
 10の#include <CStringの>
 11の#include <地図>
 12の#include <積層>
 13の#include < 設定 >
 14  使用 名前空間STDを、
15  文字列S1、S2、S3;
 17  INT LEN1、LEN2、LEN3;
 18である BOOL DP [ 1005 ] [ 1005 ;]
 。19  BOOL F = 0 ; // フラグを構築し、出力がYes / Noと判断された
20である ボイド DFS(int型 T1、int型 T2、int型 T3)// 深い検索
21は 、{
 22は     IF (F)
 23が         戻り24      IF(T1 T2 == == LEN1 && LEN2)
 25      {
 26は          Fを= 1。;
 27          リターン;
 28     }
 29      であれば(DP [T1]、[T2] == 1 30          リターン;
31      であれば(S1 [T1] == S3 [T3])
 32      {
 33          DP [T1]、[T2] = 1 34の          DFS(T1 + 1、T2、T3 + 1 )。
35      }
 36      であれば(S2 [T2] == S3 [T3])
 37      {
 38          DP [T1]、[T2] = 1 39の          DFS(T1、T2 + 1、T3 + 1 )。
40      }
 41  }
 42 INT main()の
 43  {
 44      int型の和= 0 45      INT T。
46      cinを>> T;
47      一方(T-- 48      {
 49          F = 0 50          合計++ ;
51          のmemset(DP、0はsizeof(DP))。// 必须初始化
52          CIN >> S1 >> S2 >> S3;
53          LEN1 = s1.length()。
54          LEN2 = s2.length()。
55         len3 = s3.length()。
56の          DFS(000 );
57          もし(f)は
 58              のprintf(" データは%dの設定:はい\ nを" 、和)。
59          他の
60              のprintf(" データは%dの設定:なし\ nを" 、和)。
61      }
 62 }

おすすめ

転載: www.cnblogs.com/sky-stars/p/10944278.html