Atcoderグランドコンテスト037B(DP、組合せ論、思考)

#include <ビット/ STDC ++ H.>
使用して名前空間STD;
constの長いロングMOD = 998 244 353;
文字列s、
INT A [300007];
ロングロングX、Y [7] [7];
int型のmain(){
int型N-;
CIN N - >>;
CIN >> S;
INT LEN = s.size()
のために(INT I = 0; IがLEN <; Iは++){
IF(S [I] == 'B')
A [I] 1 =;
他IF(S [I] == 'G')
A [I] = 2;
}
ロング=ロングANS 1;。
(; I <= N - 、I = 2をint型Iは++)用の
ANS = 1LL * ANS * I%モッズ; //すべての3つのボールは〜1個々のnに割り当てることができます。
以下のために(INT i = 0; iが LEN <; ++ I){// 最初のカラーボール、レコードの数に遭遇れ、第一の色ボール異なる色に直面したとき必要に応じて同時に第二の色のボールの数を記録し、遭遇したときに必要に応じて球体から第三の色、第二の色、。
第1のボールは、x [i]が】記憶された、第二の色球の数がYの存在である[([I] +色の//数 1or2)%3] に第三色([I] + 1or2)に直面したとき %3 、任意に第二の色のボールから
もし(Y [I] ])// iが[I]([I] +2)%Yの前 3個の顔I Yの前部から着色ボール[I] 】選択の
ANS ANS * Y = [I]] - %MOD;
他等価場合(Xは、[([I] + +1)%3])であれば、他//次に、他の2つは位置組み合わせに遭遇することができ、同じ色、3色が同等である
ANS =のANS * X [( Y [%MOD、([I - [I] +1)%3] ] +2)%3] ++; // Xを[(先行[I] +1 )%3] ([I] +1)% 3 Iは、X顔【からカラーボール([I] +1)の%3]を選択し
(X [(場合他の I] +2)%3])// もしそうでないと一当量、同じ2つの色の他の状態は、遭遇三色が同等である場合組み合わせることができるの
ANSの=のANS * X [( %MOD、Y [([I] +1)%3 - [I] +2)%3] ] ++; // [([I] +2 Xに先行 ]%3) ([I] +2)% 3個のIは、X面から着色ボール[([I] + 2)選択の3%]
他の
Xは、[I]] ++; // [i]は色のボールの現在の数を記録
}
COUT << ANSを、
0を返します;
}

おすすめ

転載: www.cnblogs.com/ldudxy/p/11371526.html