C.はコサックと文字列をVUS

 

。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 }

 

おすすめ

転載: www.cnblogs.com/yzxqq/p/11110914.html