2019マルチ大学研修コンテスト1题解

1001 - ブランク

$ Dpは$。種の数、間隔で表示されるいくつかの数に制限は、実際には、古典的なタイトルを考えることは比較的容易、シーケンスと同様に、クエリの異なる種類の範囲内桁の各数を尋ね求めて多くのグループ、の質問ですプレス右エンドポイントのアプローチは、走査線その後、昇順のセグメントツリーを持つ最新のメンテナンス時に表示される各番号の位置を依頼することです。この種の問題は、理由番号自体まれ、わずか4、私たちは$ dpの[i]は[A] [B] [C] [D] $前に$ I $番目の位置4桁の最近の位置を使用することができますプログラム番号は$、B、C、D $を、ですが、$、B、C、D $は正確に一つの$ I $、実際にあるので、このメモリは、実際には、寸法が省略されており、十分ではありません我々は、$ DPで、我々は状態を簡略化することができ、そのため、位置にある特定のどの数字を気にしないでください[i]は[A] [B] [C] $ $私は$ I $番目の例外を除いて、前方位置を$デジタル外側の位置は、それぞれ、他の3つのデジタル数字で\の当量のB \当量のC $を$、B、Cの$スキームを$、明確にここに表示されない比較を転送します。

1の#include <iostreamの>
 2の#include <cstdioを>
 3の#include <ベクトル>
 4  のconst  int型 MOD = 998244353 5インラインボイド UPD(INT&、int型X){
 6      + = X。
7      場合(> = MOD)A- = MOD。
8  }
 9  のconst  int型 N = 101 10  int型 N、M、DP [ 2 ] [N] [N] [N]。
11のtypedefのstd ::ペア< 整数整数 > P。
12のstd ::ベクトル<P> G [N]。
13  INT メイン(){
 14      のint T。
15      のscanf(" %dの"、&T)。
16      一方(T-- ){
 17          のscanf(" %D%dの"、&​​N、&M)。
18          のためにint型 i = 1 ; iが<= N I ++がG [I] .clear())。
19          のためのint型 Lは、R、X、M-- ;){
 20              のscanf(" %D%D%D "、&​​L&R&X)。
             G [R] .push_back(P(L、X));
22          }
 23          DPは、[ 1 ] [ 0 ] [ 0 ] [ 0 ] = 4 24          INT ANS = 0 25          のためにint型 i = 1 ; iが<= N; iが++ ){
 26              のint T = I&1 27              もし(iはN <)のためのint型のx = 0 ; X <= I; ++ x)のためのINT Y = xであり; y <= I; Y ++)のためのINT Z = Y、Z <= I; Z ++ )DP [T ^1 ] [X] [Y] [Z] = 0 ;
28              のためにint型のx = 0であり、x <I; ++ x)のためのINT Y = xであり、y <I; Y ++)のためのINT Z = Y、Z <I; Z ++)場合(DP [T] [X ] [Y] [Z]){
 29                  ブール F = 30                  のための(自動&C:G [i])と{
 31                      のint NUM = 1 32                      であれば(X> = C.最初)NUM + = 3 33                      他の 場合(Y> = C.最初)NUM + = 2 ;
34                      他の 場合(Z> = C.最初)NUM ++ 35                      であれば(NUM =!c.second){
 36                          F = 37                          ブレーク;
38                      }
 39                  }
 40                  であれば(! {F)
 41                      、DP [T] [X] [Y] [Z] = 0 ;
42                      続け;
43                  }
 44                  であれば(I == N)UPD(ANS、DP [T] [X] [Y] [Z])。
45                  {
 46                      UPD(DP [T ^ 1 ] [X] [Y] [z]は、DP [T] [X] [Y] [Z])。
47                      UPD(DP [T ^ 1 ] [Y] [Z] [I]、DP [T] [X] [Y] [Z])。
48                      UPD(DP [T ^ 1 ] [X] [z]は[I]、DP [T] [X] [Y] [Z])。
49                      UPD(DP [T ^ 1 ] [X] [Y] [I]、DP [T] [X] [Y] [Z])。
50                  }
 51              }
 52          }
 53          のprintf(" %d個の\ n " 、ANS)。
54      }
 55      リターン 0 56 }
コードの表示

 

1012 - シーケンス

$ NTT $。我々は、次に、$ Mは$操作後= \ sum_ {i = 1} ^ N a_ix ^ I $、$ G(C)= \ sum_ {I = 0} X ^ {CI} $、最終$ Fをさせた場合$ I $アイテムのシーケンスは、私は$ ^ $ F \ prod_ {i = 1}因子^ MG(C_I)$ xを$です。我々は$ H = \ prod_ {i = 1} ^ MG(C_I)$をさせ、それを見ることができる、一連の動作が、結果には影響せず、それによって我々は$ $ C_Iによる分類の値を算出することができます。我々は最初の$ C_I = 1 $、$ gを有する、この時間を考慮して(1)= \ sum_ {i = 0} X ^ i個の$、操作$のC_I = 1 $は、次に明確$があり、$ K $いますG(1)^ K = \ sum_ {i = 0} C_ {I + K-1} ^ {I} X ^ i個の$、それは$ Kにアイテムの$ I $フリーの間の差を計算することと等価であるのでいくつかのプログラムは、ボックスに差が$です。$ C_I 2 $と$ = C_I = 3 $、実際には、計算が同じである場合には、ここではそれらを繰り返さない、我々は最後の$ NTT $は乗算をすることができ、加速使用しています。

おすすめ

転載: www.cnblogs.com/Onlymyheart/p/11235285.html