AtCoder Beginner Contest 278 E問題 Grid Filling
問題
提出解答
問題の概要
縦 行, 横 列からなるグリッドがある. 上から 行目, 左から 行目にあるマス目を と書く.
には整数 が書かれている. ただし, である.
を満たす整数の組 全てについて次の問に答えよ.
- を満たす を塗りつぶす. 塗りつぶされていないマスに書かれている整数の種類数を求めよ.
制約
解法
を満たす を塗りつぶすことを塗りつぶし ということにする.
それぞれに対して, 塗りつぶした後, 残ったマスに が存在するかどうかを判定する.
となる の個数を とする.
このとき, 以下は全て同値である.
- 塗りつぶし の後, 残ったマスに が存在しない.
- となる は全て を満たす.
- を満たす の組の個数は である.
を満たす の組の個数 を高速に求める方法を考える. を
とすると,
である.
この [tex: v^{(a)}{k,l}] は正しく [tex: B^{(a)}{i,j}] による2次元の区間和である.
このような2次元の区間和は2次元の累積和を利用することによって, 高速化できる.
計算量について, 各 ごとに2次元の累積和の前計算を 時間, 累積和1回求めるためには 時間であり, これを 回行う. よって, 合計 時間である.
これを に対して行うので, 合計で 時間で計算できた.