Time Limit: 2 sec / Memory Limit: 1024 MB
ストーリー
AtCoder社は年に一度、企業合同演奏会を開催している。 高橋社長は演奏会で指揮者をすることになった。 演奏者の音量を調整して最高の演奏にしてほしい。
問題文
演奏会では N 人の演奏者が横一列に並び T 秒の曲を演奏している。 左から i (0\leq i\leq N-1) 番目の演奏者を演奏者 i と呼ぶことにする。
各演奏者について、デフォルトの音量を基準値 0 とする。指揮者は毎秒、0\leq L\leq R\leq N-1 を満たす整数の組 (L,R) と整数 dV を選択し、L\leq i\leq R を満たす全ての演奏者 i に、dV だけ音量を変更するよう指示を出すことができる。 時刻 t に指示を出された演奏者は時刻 t 以降(t を含む)の音量が dV だけ変化する。
複数回音量変更の指示をした場合、変化量は累積される。例えば、時刻 0 に演奏者 i の音量を 1 変化させ、時刻 1 に演奏者 i の音量を -2 変化させた場合、時刻 1 における音量は 1-2=-1 となる。
各時刻 t、各演奏者 i について、理想的な音量 V_{t,i} が入力として与えられるので、 実際の音量と理想的な音量との差の絶対値の総和が出来るだけ小さくなるように指揮をして欲しい。
得点
時刻 t における演奏者 i の実際の音量を V_{t,i}' とし、理想的な音量とのずれの総和を S'=\sum_{t=0}^{T-1}\sum_{i=0}^{N-1}|V_{t,i}-V_{t,i}'| とする。何も指示をしなかったときのずれの総和を S_{0}=\sum_{t=0}^{T-1}\sum_{i=0}^{N-1}|V_{t,i}| としたとき \max(S_{0}-S'+1, 0) がそのテストケースの得点となる。
テストケースは全部で 100 個あり、各テストケースの得点の合計が提出の得点となる。 一つ以上のテストケースで不正な出力や制限時間超過をした場合、提出全体の判定がWAやTLEとなる。
入力
演奏者の人数 N、演奏の長さ T、 時刻 t における演奏者 i の理想的な音量 V_{t,i} が以下の形式で与えられる。
N T V_{0,0} \cdots V_{0,N-1} \vdots V_{T-1,0} \cdots V_{T-1,N-1}
各値はそれぞれ以下の制約を満たす。
- N=50
- T=500
- -3\leq V_{t,i}\leq 3
出力
各時刻での指示を以下の形式で出力せよ。
L_{0} R_{0} dV_{0} \vdots L_{T-1} R_{T-1} dV_{T-1}
- L_{t}, R_{t} は音量変更する演奏者の範囲を表す整数値であり、0\leq L_{t}\leq R_{t}\leq N-1 を満たさなければならない。
- dV_{t} は音量を変更する量を表す整数値であり、|dV_{t}|\leq 50 を満たさなければならない。
入力生成方法
V_{t,i} は以下の方法で生成される。
- V_{t,i} を0で初期化する。
- 各 t ごとに、0\leq a,b\leq N-1 を満たす整数値 a,b と d\in\{-1,1\} を一様ランダムに生成し、\min(a,b)\leq i\leq \max(a,b) を満たす全ての i に対して V_{t,i} に d を加える。
- 2を3回繰り返す。
ツール(入力ジェネレータ・ビジュアライザ)
- Web版: ローカル版より高性能でアニメーション表示が可能です。
- ローカル版: 使用するにはRust言語のコンパイル環境をご用意下さい。
- Windows用のコンパイル済みバイナリ: Rust言語の環境構築が面倒な方は代わりにこちらをご利用下さい。
コンテスト期間中に、ビジュアライズ結果の共有や、解法・考察に関する言及は禁止されています。ご注意下さい。
入力例1
5 3 0 0 0 0 0 0 -1 -1 -1 0 1 2 2 2 2
この入力例は例示のためのもので、制約を満たさないことに注意せよ。
出力例1
0 0 0 1 3 1 1 4 -3