効果の対象に
FJ彼は遺伝子は牛が何のスポットを持っていないコントロールするものを探していました最後にはスポットや牛を持っていないいくつかのスポットが、あります。
彼は、その後、N(ピックアップ1 ≤n ≤ 5 0 0)斑点牛なしスポットN牛の頭を
ウシ遺伝子の長さがmである(1 ≤M ≤ 。5 0 0)(4つの文字を含むATCG遺伝子)
このシーケンスのサブシーケンスを探している、あなたはスポットがあるかどうかを判断することができます。
サブストリングは、要件を満たす必要があります。サブストリング牛のこの部分のスポットではなく、牛のこの分子の文字列のスポットをせずに同じであること
ストリングの最短長さ
トピック分析
さんが見つけてみましょういいえ牛で何のスポットは存在していないで、それは牛を発見しますこれらのセグメント内のサブストリングの最小の長さの主題です。
同じZichuanかどうかを判断するには、ギリシャの貝を使用することができます。
私たちは、再発ポイントと右ポイントI jを残しました。
記録の数が異なるDは、同時に重いセットが付属しています。
0のときにはすでにD、そして我々は異なるまで、それ以外の場合は、右のJを押し続けて、左から右に私をプッシュし始めました。
詳細については、コードを参照してください。
1つの#include <ビット/ STDC ++ H> 2 使用して 名前空間STDを、 3 CONST INT MAXN = 505 。 4符号なしのtypedef 長い 長ULL。 5 CONST ULLベース= 233 。 6 7 INTのN、M。 8 ストリングS [MAXN]、P [MAXN]。 9 ULL hsh1 [MAXN]、hsh2 [MAXN]、R [MAXN]。 10 INT メイン(){ 11 のscanf(" %D%dの"、&N、&M)。 12 のための(int型 I =1 ; ++ I)CIN >>; iが<= N [i]は、S。 13 のために(int型 I = 1 ; ++ I; iが<= N)CIN >> P [i]は、 14 R [ 0 ] = ベースと 15 のためには、(int型 I = 1 ; I <= M; ++ I)R [I] = R [I- 1 ] * ベースと 16 17 のint i = 0、J = 0 ; 18 INT ANS = M = D N。 19 一方(J < M){ 20 であれば(Dの== 0)ANS =分(ANS、J- I)。 21 22 もし(D> 0 ){ 23 、D = 0 ; 24 セット < 整数 > SS。 25 のための(int型のk = 1 ; K <= N; ++ K) 26 ss.insert(hsh1 [K] + = R [j] * S [k]は[J])。 27 のための(int型のk = 1 <; K = N ++ K) 28 であれば(ss.count(hsh2 [K] + = R [j] * P [k]は[J])> 0 ) 29 ++ D ; 30 ++ 、J。 31 } 32 他{ 33 D = 0 ; 34 セット < INT > SS。 35 のための(int型のk = 1 ; K <= N; ++ K) 36 ss.insert(hsh1 [K] - = R [I] * S [k]は[I])。 37 のための(int型のk = 1 ; K <= N; ++ k)が 38 であれば(ss.count(hsh2 [K] - = R [i]は* P [k]は[I])> 0 ) 39 ++ D ; 40 ++ I; 41 } 42 } 43 のprintf(" %d個の\ n " 、ANS)。 44 リターン 0 ; 45 }