AT_ahc032_a [AHC032A] Mod Stamp

Description

[problemUrl]: https://atcoder.jp/contests/ahc032/tasks/ahc032_a 二次元のマス目における一番左上のマスの座標を $ (0,\ 0) $ とし、そこから下方向に $ i $ マス、右方向に $ j $ マス進んだ先のマスの座標を $ (i,\ j) $ とする。 $ N\ \times\ N $ マスの盤面がある。最初、盤面の各マス $ (i,\ j) $ に整数 $ a_{i,\ j} $ が設定されている。 $ 3\ \times\ 3 $ マスのスタンプが $ M $ 個ある。スタンプ $ m $ $ (0\ \leq\ m\ \leq\ M\ -\ 1) $ の各マス $ (i,\ j) $ に整数 $ s_{m,i,j} $ が書かれている。 あなたは以下の操作を $ K $ 回まで行うことができる。 - スタンプ $ m $ と盤面のマス $ (p,\ q) $ $ (0\ \leq\ p,\ q\ \leq\ N\ -\ 3) $ を選択し、スタンプ $ m $ の座標 $ (0,\ 0) $ が盤面のマス $ (p,\ q) $ と合うようにスタンプを押す。この操作により、スタンプの各マス $ (i,\ j) $ $ (0\ \leq\ i,\ j\ \leq\ 2) $ に対して、盤面のマス $ (p\ +\ i,\ q\ +\ j) $ の値に $ s_{m,i,j} $ が加算される。盤面からはみ出るようにスタンプを押したり、スタンプを回転させて使用したりすることはできない。 同じスタンプを何度も使用したり、使わないスタンプがあったりしても構わない。同じ場所に何度もスタンプを押しても構わない。 最終的な盤面の各マスの値を $ 998244353 $ で割った余りの総和を最大化して欲しい。

Input Format

入力は以下の形式で標準入力から与えられる。 > $ N $ $ M $ $ K $ $ a_{0,\ 0} $ $ \cdots $ $ a_{0,\ N\ -\ 1} $ $ \vdots $ $ a_{N\ -\ 1,\ 0} $ $ \cdots $ $ a_{N\ -\ 1,\ N\ -\ 1} $ $ s_{0,\ 0,\ 0} $ $ s_{0,\ 0,\ 1} $ $ s_{0,\ 0,\ 2} $ $ s_{0,\ 1,\ 0} $ $ s_{0,\ 1,\ 1} $ $ s_{0,\ 1,\ 2} $ $ s_{0,\ 2,\ 0} $ $ s_{0,\ 2,\ 1} $ $ s_{0,\ 2,\ 2} $ $ \vdots $ $ s_{M\ -\ 1,\ 0,\ 0} $ $ s_{M\ -\ 1,\ 0,\ 1} $ $ s_{M\ -\ 1,\ 0,\ 2} $ $ s_{M\ -\ 1,\ 1,\ 0} $ $ s_{M\ -\ 1,\ 1,\ 1} $ $ s_{M\ -\ 1,\ 1,\ 2} $ $ s_{M\ -\ 1,\ 2,\ 0} $ $ s_{M\ -\ 1,\ 2,\ 1} $ $ s_{M\ -\ 1,\ 2,\ 2} $ 各値はそれぞれ以下の制約を満たす。 - $ N\ =\ 9 $ - $ M\ =\ 20 $ - $ K\ =\ 81 $ - $ 0\ \leq\ a_{i,\ j}\ \leq\ 998244352 $ - $ 0\ \leq\ s_{m,\ i,\ j}\ \leq\ 998244352 $

Output Format

スタンプを押した回数を $ L $ $ (0\ \leq\ L\ \leq\ K) $、 $ l $ 回目の操作で選択したスタンプと盤面のマスをそれぞれ $ m_l $ $ (0\ \leq\ m_l\ \leq\ M\ -\ 1) $ 、 $ (p_l,\ q_l) $ $ (0\ \leq\ p_l,\ q_l\ \leq\ N\ -\ 3) $ としたとき、以下の形式で標準出力に出力せよ。 > $ L $ $ m_0 $ $ p_0 $ $ q_0 $ $ m_1 $ $ p_1 $ $ q_1 $ $ \vdots $ $ m_{L\ -\ 1} $ $ p_{L\ -\ 1} $ $ q_{L\ -\ 1} $ [例を見る](https://img.atcoder.jp/ahc032/e2weanqa.html?lang=ja&seed=0&output=sample)

Explanation/Hint

### 得点 全ての操作を終えた後、盤面のマス $ (i,\ j) $ に設定された整数を $ b_{i,\ j} $ としたとき、以下の得点が得られる。 \\\[ \\sum\_{i = 0}^{N - 1}{\\sum\_{j = 0}^{N - 1}{(b\_{i, j} \\bmod 998244353)}} \\\] ここで、 $ b_{i,\ j}\ \bmod\ 998244353 $ は $ b_{i,\ j} $ を $ 998244353 $ で割った余りを表す。 操作回数が $ K $ を超えた場合や、不正な操作を出力した場合は WA と判定される。 テストケースは全部で 150 個あり、各テストケースの得点の合計が提出の得点となる。 一つ以上のテストケースで不正な出力や制限時間超過をした場合、提出全体の判定が WA や TLE となる。 コンテスト時間中に得た最高得点で最終順位が決定され、コンテスト終了後のシステムテストは行われない。 同じ得点を複数の参加者が得た場合、提出時刻に関わらず同じ順位となる。 ### 入力生成方法 $ L $ 以上 $ U $ 以下の整数値を一様ランダムに生成する関数を $ \mathrm{rand}(L,\ U) $ と表す。 各 $ a_{i,\ j} $ と $ s_{m,\ i,\ j} $ は全て独立に、 $ a_{i,\ j}\ =\ \mathrm{rand}(0,\ 998244352) $, $ s_{m,\ i,\ j}\ =\ \mathrm{rand}(0,\ 998244352) $ により生成する。 ### ツール(入力ジェネレータ・ビジュアライザ) - [Web版](https://img.atcoder.jp/ahc032/e2weanqa.html?lang=ja): ローカル版より高性能でアニメーション表示が可能です。 - [ローカル版](https://img.atcoder.jp/ahc032/e2weanqa.zip): 使用するには[Rust言語](https://www.rust-lang.org/ja)のコンパイル環境をご用意下さい。 - [Windows用のコンパイル済みバイナリ](https://img.atcoder.jp/ahc032/e2weanqa_windows.zip): Rust言語の環境構築が面倒な方は代わりにこちらをご利用下さい。 コンテスト期間中に、ビジュアライズ結果の共有や、解法・考察に関する言及は禁止されています。ご注意下さい。