この記事は帰ってきた AOJ-ICPC Advent Calendar 2022 19 日目の記事です
問題
https://onlinejudge.u-aizu.ac.jp/problems/2829
順を追って考察していけば解けるような数え上げの問題です
問題概要
整数 と長さ の配列 が与えられます
次の条件を全て満たす配列の集合として考えられる最大の大きさを で答えなさい
集合に含まれる任意の配列は以下の条件を満たす
・長さが である
・配列を とする時、 には から までの整数が つずつ含まれる
・各 について、 のいずれかは に等しい
・ の である要素と でない要素のいずれかとを した時、新しくできる配列は集合に含まれない。(この操作を、以下 操作と呼ぶ)
解法
各 について から へ辺を貼ったグラフを考えると、(有向辺を無向辺と考えた時の)各連結成分は以下のようになっている必要がある
また、 操作において新しくできた配列が集合に含まれている時、新しくできた配列も条件を満たしているため、 操作において問題であるのはパターン の場合のみであることがわかる
さて、ここで つ大事になってくることが、この操作において連結成分のブロックの並びは変わらないということである
例えば、初め であった時、操作をしても のように、 の並びは変わらない
観察
上の つの配列について、上下に隣接するもの同士が同じ集合に入っていてはならない → つは同じ集合に入れることができる
この観察を元にすると、ある連結成分のブロックの並びにおいて、集合に含まれるその並びの配列の個数の最大値がわかる。
パターン であるような連結成分の個数が 個であるような場合を除いておくと、 を挿入できる場所は以下の つの場合に分けることができる
[配列の端][パターン が 個][パターン]
[パターン][パターン が 個][パターン]
いずれについても、 は最大で 個入れることができる。
よって、それぞれ の値で主客転倒して答えを求めてやり、足し合わせれば良い。
具体的には、パターン の配列の数が 個、パターン の配列の数が 個あり、パターン の配列が 個連続しているようなものについて
を足してやれば良い
計算量は である
提出
終わりに
こういう問題、好きです
アドカレ大幅に遅刻してすみません