DOJ logoDOJ
問題
最近追加された問題保存した問題Workbooks
カテゴリDLCコンテストグループチーム掲示板
ランキング
正解数ランキングストリークランキングDOJ Powerランキング
提出状況
問題募集ログイン新規登録
DOJ logoDOJ

OI形式のサブタスク採点、Eloレーティング、Discord認証を備えたオンラインジャッジです。

問題
問題一覧カテゴリ
コミュニティ
コンテストランキング掲示板お知らせ外部のコンテストを開催するガイド
アカウント
ログイン新規登録ジャッジ状態
ポリシー
利用規約DLCの利用規則プライバシーAPI 文書言語ランタイムコンテストの順位報酬レーティングとパフォーマンス
© 2026 DOJ
All rights reserved
解説

WhiteBlue

問題に戻る

解説

各列を NNN ビットの整数で表す。ビット 000 は白、ビット 111 は青を表す。

まず、同じビットが縦に3つ連続しない列マスクだけを残す。その集合を VVV、要素数を KKK とする。N≤8N\le 8N≤8 より K≤68K\le 68K≤68 である。各列で選ぶマスクは、あらかじめ塗られたマスの色とも一致する必要がある。

横方向の条件を確認するには直前の2列だけを記憶すればよい。dp[a][b]dp[a][b]dp[a][b] を、処理済みの列の最後の2列が a,ba,ba,b である有効な塗り方の数とする。新しい列 ccc を追加する際、どの行でも a,b,ca,b,ca,b,c の対応する3ビットがすべて同じでなければ追加できる。このとき に を加える。値はすべて で割った余りとして保持する。

M=1M=1M=1 の場合は、最初の列に置けるマスクの数を数える。それ以外の場合は、最初の2列の可能なマスクの組で DP を初期化し、3列目以降の遷移を行い、最後に全状態の値を足す。

縦方向に有効なマスクの生成は O(N2N)O(N2^N)O(N2N) 時間、既存の色との整合性確認は O(MNK)O(MNK)O(MNK) 時間、DP は O(MK3)O(MK^3)O(MK 時間である。遷移を前計算する場合のメモリ使用量は である。加算する値は常に法で割った余りなので、符号付き32ビット整数に収まる。

next[b][c]next[b][c]
next[b][c]
dp[a][b]dp[a][b]dp[a][b]
1 000 000 0071\,000\,000\,0071000000007
3
)
O(K3+MK+K2)O(K^3+MK+K^2)O(K3+MK+K2)
Solution written by GPT6