この質問は、あなたが解決するためにプルーン暴力を追加することができますので、データ1E4の範囲を見ることが第一の主題です。
キーは、文字列の長さを分析することで、位相差は、変換辞書に長さ1を等しくすることができます。
これに基づき、一致する文字列、同じ文字ANS ++の長さとしてビューのマッチング、。
ポイント分析されている変換することができます。
最後に、出力形式と要件の点に注意してください。
#include <cstdioを> する#include <CStringの> する#include <cmath> の#include <CCTYPE> の#include <iostreamの> する#include <アルゴリズム> の#include <地図> の#include < セット > の#include <ベクトル> の#include < ストリング > 書式#include <スタック> の#include <キュー> typedefの長い 長いLL。 符号なしのtypedef 長い 長いULL。 使用して 名前空間はstdを、 //BOOL SQRT(LLのN){リターン(LL)SQRT(N)* SQRT(N)== N。} CONST ダブル PI = ACOS( - 1.0)、ESP = 1E- 10 。 constの LL INF = 99999999999999 ; const int型 INF = 999999999、MAXN = 1E4 + 24 。 列M、。 // ベクトル<整数> LEN1、LEN2。 ベクトル< 文字列 > V1、V2; INT メイン() { // freopenは( "in.txt"、 "R"、STDIN)。 // freopenは( "out.txtを"、 "W"、STDOUT)。 しばらく(CIN >>「#」)ブレイク。 v1.push_back(M)。// len1.push_back(m.size()); } 一方(CIN >> A){ 場合(A == " #")ブレーク。 v2.push_back(A)。// len2.push_back(a.size()); } int型のx = v1.size()、Y = )(v2.size。 以下のために(int型 i = 0 ; iはyと<; iは++ ){ // !IF(見つける(v1.begin()、v1.end()、V2 [I]) - v1.end()= v1.size() )COUT << V2 [i]は<< "正しいです"。 BOOLフラグ= 0 。 用(int型のk = 0 ; K <X; ++ k個){ 場合(V1が[K] == V2 [i])と{フラグ= 1。ブレーク;} } 場合(フラグ){COUT << V2 [i]は<< " 正しい\ nは"。続け; } 他{ COUT << V2 [i]は<< " :" 。 INTのL =のV2 [i]を.size()。 以下のための(int型 J = 0 ; jの<X; J ++){ int型 H = V1 [J] .size()。 int型 ANS = 0 ; もし(L == H + 1 ){ ため(INT、M = 0、D = 0 ; M <Lであり; m ++ ) 場合(V1 [J] [D] == V2 [i]は[M]){ANS ++。D ++ ; } } そう であれば(L + 1 ==の時間){ ため(INT、M = 0、D = 0 ; M <Hであり; m ++ ) もし(V1 [J] [M] == V2 [i]は[D]){ANS ++。D ++ ; } } そう であれば(1- ==の{H) のための(int型、M = 0、D = 0 ; M <Lであり; m ++、D ++ ) 場合(V1 [J] [D] == V2 [i]は[M])ANS ++ ; } もし、((L> = H)&&(ANS == L - 1))COUT << " " << V1 [J]。 もし((L <H)&&(ANS == 1))COUT << " " << V1 [J]。"" ); } 戻り 0 。 } / * 入力: 出力: モデリング: 方法: 複雑: 要約: * /