筑波大学プログラミングコンテスト2024
コンテスト日時
2024/11/17 (Su) 12:00 - 16:00

K - Game in Advertisement 2

Benihuki
2
s
1024
MB
700

問題文

Mari ちゃんは SNS で見た広告のゲームに興味を持ったので、インストールしてプレイしてみることにしました。

ゲームでは $M$ 本の車線からなる道路が画面手前から奥に伸びており、左から順に車線 $j = 1,2,...,M$ と番号が振られています。
武器を持った兵士の集団である「軍隊」を適切な車線に移動させることで、軍隊の戦力をできるだけ大きくすることがこのゲームの目的です。

軍隊は「人員」を表す変数 $a$ と「武器威力」を表す変数 $b$ の、$2$ つのパラメータを持っています。
現在時刻 $i = 0$ で軍隊は車線 $1$ にいて、人員は $a=1$、武器威力は $b=1$ です。
軍隊は整数 $n$ を用いて $i = n + 0.5$ と表される時刻にのみ、好きな車線に移動させることが可能です。

これから時刻 $i = 1,2,...,N$ に、各車線にゲートまたはタルが流れてきます。
この情報は整数 $A_{i,j}$ で与えられ、次のような意味を持ちます。

  • $A_{i,j}\neq0$ のとき、時刻 $i$ において、車線 $j$ に整数 $A_{i,j}$ が書かれたゲートが流れてくることを意味する。
    時刻 $i$ において車線 $j$ に軍隊がいる場合にこのゲートを通ることになり、通ると $a$ に $A_{i,j}$ が加算される。
    つまり、ゲートに書かれた整数の分だけ、軍隊の人員が増減する。
    ゲートを通ったことによって $a\leq0$ となってしまう場合、この時点でゲームオーバーになる。
  • $A_{i,j} = 0$ のとき、時刻 $i$ において、車線 $j$ にタルが流れてくることを意味する。
    時刻 $i$ において車線 $j$ に軍隊がいる場合にこのタルを破壊することができ、破壊すると中身のアタッチメントにより、$b$ に $1$ が加算される。
    つまり、軍隊の武器威力が $1$ 増加する。

さて、軍隊の戦力 $X$ は $X = a^2b$ で定義されます。
時刻 $i = N + 1$ における軍隊の戦力 $X$ を最大化してください。ただし、どのように行動しても途中でゲームオーバーになってしまう場合はその旨を報告してください。

なお、制約から出力すべき値が $1.5\times10^{18}$ 以下であることが証明できます。

制約

  • 入力は全て整数
  • $1\leq N\leq10^5$
  • $1\leq M\leq5$
  • $|A_{i,j}|\leq100\ (1\leq i\leq N,1\leq j\leq M)$

部分点

この問題には、部分点が設定されている。部分点の採点方法については、コンテストトップ を参照すること。

  1. ($100$ 点)
  • $N \leq10$
  1. ($200$ 点)
  • $N \leq1000$
  1. ($400$ 点)
  • 追加の制約はない。

入力

入力は以下の形式で標準入力から与えられる。

$N$ $M$
$A_{1,1}$ $A_{1,2}$ $\ldots$ $A_{1,M}$
$A_{2,1}$ $A_{2,2}$ $\ldots$ $A_{2,M}$
$\vdots$
$A_{N,1}$ $A_{N,2}$ $\ldots$ $A_{N,M}$

出力

時刻 $i = N + 1$ における軍隊の戦力 $X$ の最大値を $1$ 行に出力せよ。
ただし、その前にゲームオーバーとなる場合には $-1$ を出力せよ。

入力例 1
5 2 0 1 3 -2 0 0 -6 7 5 0
出力例 1
768

最適な行動を次に示します。

  • 時刻 $0.5$ に車線 $1$ に移動させ、時刻 $1$ にタルを破壊して武器威力を $1$ 増加させます。
  • 時刻 $1.5$ に車線 $1$ に移動させ、時刻 $2$ にゲートを通って人員を $3$ 人増加させます。
  • 時刻 $2.5$ に車線 $2$ に移動させ、時刻 $3$ にタルを破壊して武器威力を $1$ 増加させます。
  • 時刻 $3.5$ に車線 $2$ に移動させ、時刻 $4$ にゲートを通って人員を $7$ 人増加させます。
  • 時刻 $4.5$ に車線 $1$ に移動させ、時刻 $5$ にゲートを通って人員を $5$ 人増加させます。

以上の行動後、時刻 $6$ において人員は $16$ 人、武器威力は $3$ となるので、戦力は $16^2\times3=768$ となります。

入力例 2
4 1 3 5 -20 100
出力例 2
-1

どのように行動しても,時刻 $3$ で人員が $0$ 人以下になります.

入力例 3
10 5 -10 0 1 3 -1 0 16 4 -14 15 -12 -15 -11 -9 -20 0 3 7 -9 16 -2 0 -11 0 8 -1 0 -19 -10 -3 3 0 -2 1 -10 0 4 2 9 7 0 15 -4 12 19 -14 -3 12 6 7
出力例 3
20736
提出
C++23 (g++ 12.2.0)