。1 / * ****** 2 http://codeforces.com/contest/1186/problem/C 3。 イタリアもの:0,1 2に、文字列、長い文字列Bよりも文字列。 図4は、 bは、文字列の偶数であるなど、どのように多くの文字列の長さと異なる文字列の数を尋ねました。 5つの アイデア:最初では、(A0で示す)最初の文字列と文字B(ANS0として示される)の異なった数を比較します。第2の文字列でBと比較しないであろう(A1と呼ぶ)が、最初の文字列と比較されます。 6 A1を制御しない[I] == A0 [I:(1):ここでは2つのケースに分け ] [i]は関係なく、A0の、この場合はaとb [i]は[i]とB A1、同じであるため、(。 [i])と、前者と同じ場合である 7。 (2):A1は、[I] = A0は、[i])と数は(S1と称する場合が記録します!(A1 [i]を有するだけA0 [I] [i]は、Bの場合には[I]、Bの場合とは逆である)が 8 であれば(ANS0 + S1)%2 == 0 ストリングでは、答えの一つであり、 9 次いで、いずれかの最後にBへのサイズに等しい応答文字列ではない、我々は、(文字列+ケースの数(2)の前の文字列の文字の異なった数)を決定することができます。 10は、 任意の文字列の場合、番号(2)の場合、それは0(1)によって前処理することができます。 11 *** * / 12 13 14の#include <ビット/ STDC ++ H> 15 使用 名前空間STDを、 16 INT S [ 1000009 ]、ANS [ 1000009 ]。 17 のint main()の 18 { 19 列SA、SB。 20 INT LA、LB; 21 CIN >> SA >> SB。 22 ラ= sa.size()、LB = sb.size()。 23の [S 0 ] = 0 。 24 のために(int型 i = 1 ; iがラを<Iは++ ) 25 { 26 もし(SA [I] == SA [I- 1 ])S [I] = sの[I- 1 ]。 27 他 S [I] = sの[I- 1 ] + 1 。 28 } 29 のint、K = 0 。 30 のためには、(int型 i = 0 ; iは、LB <; iは++ ) 31 { 32 であれば(!SA [I] = SB [i])とANS [LB- 1 ] ++ ; 33 } 34 であれば(ANS [LB- 1 ]%2 == 0)ANS [LB- 1 ] = 0 ; 35 のための(int型 ; Iラ<I ++はiはポンド= ) 36 { 37の ANS [I] =(ANS [I- 1 ] + S [i]を-s [I-LB])%2 。 38 } 39 INT日焼け= 0 。 40 のためには、(int型 I = LB- 1 ; iはラ<I ++は) 41 { 42 であれば(ANS [I] == 0)日焼け++ 。 43 } 44 COUT <<日焼け<< ENDL。 45 リターン 0 ; 46 }