再帰的な問題
このタイトルは私にとって良い......難しい法律を見つけるために感じているか、ゆっくりとそれについて考えます
题意:S1 = C、S2 = FF、S3 = CFF、... S [I] = sの[I - 2] + S [I - 1]
S5で開始する(S5 = cffffcff)、5で分離された2つのCFF、出力5が存在しました
S6 = ffcffcffffcff、出力と全てCFFとの間の距離、3 + 5 + 8 = 16
、iは<S [I] = 201314、出力ANS [I]
考える:見つかったいくつかのクラスフィボナッチ数、文字列s [i]は= Sを[I - 2] [私は - 1]質問+ Sの意味は、文字列の長さがlen [i]を= LEN [I - 1] + lenの[I - 2]、C列NUMの数[I] = NUM [I - 1] + NUM [I - 2]。
その後、位置及び文字列cを記録する必要があり、最初の文字の位置は、和[I] =和は1であり、[I - 1] +和[I - 2] + LEN [I - 2] * NUM [ N - 1]。
ANSについては、それは考えることができ、ANS [I] =アンスは、[I - 1] + ANS [I - 2] +?
?iは - 1とI - CFF及び図2に示すように、第一オペレータとの間の距離I - 1個のCに対するすべてのI - シリーズ2の第1列から、両方numは[I - 1] * lenは[I - 2] +和[I - 1] ............式
そこ2 NUM - [ - 2 i]は、両方NUM [I - 1] * lenは[I - 2] * NUM [I - 2] + NUM [I - 2] Cは、NUMによって必要とされるタイプであり、Iため[I - 2] *和[I - 1] ...... 2式
実際私 - C 1だけ動きIにおける - 位置2、次に二項減算和にC [N - 2] * NUM [N - 1]
化简可得ANS [I] =のANSは、[I - 1] + ANS [I - 2] +(LEN [I - 2] * NUM [I - 2] - 和[I - 2])* NUM [I - 1] +和[I - 1] * NUM [I - 2]
そして、長い長いオープンする必要があり、これらの4つの配列に注意を払う、または各1つの取るために、剰余をオーバーフローします。
コード:
1の#include <iostreamの> 2の#include <cstdioを> 3 4 使用して 名前空間STDを、 5 6 のconst int型 N = 201314 + 1 。 7 のconst int型 MOD = 530600414 。 8 typedefの長い 長いLL。 9 10 のLL LEN [N]、NUM [N]、合計[N]、ANS [N]。 11 12 のint main()の 13 { 14 のint T、N。 15 16 CIN >> T。 17の LEN [0 ] = 1、LENが[ 1 ] = 2、LENは[ 2 ] = 3、lenが[ 3 ] = 5、レン[ 4 ] = 8、レン[ 5 ] = 13 。 18 かどうか[ 0 ] = 1かどうか、[ 1 ] = 0かどうか、[ 2 ] = 1かどうか、[ 3 ] = 1かどうか、[ 4 ] = 2、か[ 5 ] = 3 ; 19 午前[ 0] = 1、和[ 1 ] = 0、和[ 2 ] = 1〔、合計3 ] = 3、和[ 4 ] = 7、合計が[ 5 ] = 20 。 20の ANS [ 4 ] = 5、ANS [ 5 ] = 16 。 21 のためには、(int型 I = 5、iがN < - 1 ; iは++ ){ 22 LEN [I + 1 ] =(LEN [I] + LEN [I- 1 ])%MOD。 23 確実[I + 1 ] =(NUM [I] + NUM [I- 1 ])%MOD。 24 AM [I + 1 ] =(I [I] + I [I- 1 ] + LEN [I- 1 ] * NUM [I])%MOD。 25の ANS [I + 1 ] =(ANS [I] + ANS [I- 1 ] +(((LEN [I- 1 ] * NUMは[I- 1 ] - I [I- 1 ])MOD%)* NUM [ I])MOD%+(I [I] * NUM [I- 1 ])MOD%)%MOD。 26 27 } 28 のintフラグ= 0 。 29 一方、(I - ){ 30 フラグ++ ; 31 のscanf(" %d個"、&N) 32 のprintf(" ケース#1%のD:" 、フラグ); 33 のprintf(" %d個の\ n "、ANS [N- 1 ])。 34 } 35 リターン 0 。 36 }
考えて再び一緒に入れて書かれた説明(
より明確に感じ