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

G - Food Fight

Earlgray
2
s
1024
MB
600

問題文

$N$ 個の石の山があり、はじめ $i$ 番目の山には石が $A_i$ 個あります。これらの山を使って先手橋くんと後手木くんがゲームをします。
先手橋くんを先手として交互に次の操作を行います。

  • 操作する前の時点での山の数を $M$ とする。整数 $i, x, y$ を $1 \leq i \leq M, x \in \{ 0,1 \}, 1 \leq y < A_i - x$ となるように決める。
  • $x = 1$ なら山 $i$ から石を一つ選び、食べる。
  • 残った $A_i - x$ 個の石から $y$ 個の石を選び新しい山 $M+1$ として置く。以降の操作では $A_{M+1} = y$ とする。

条件を満たすように $i, x, y$ を決めることができない場合ゲームに負け、負けなかったほうが勝ちます。
両プレイヤーはゲームに勝ったとき $2$ のうれしさを得ます。また、$1$ 番目の山には $1$ つだけおいしい石があり、これを食べることができた場合 $1$ のうれしさを得ます。

先手橋くんと後手木くんのゲーム終了時のうれしさをそれぞれ $F, S$ としたとき、
先手橋くんは $F - S$ を最大化、後手木くんは最小化するよう最適な行動をとります。
このときの $F - S$ の値を求めてください。

制約

  • $1 \leq N \leq 5 \times 10^5$
  • $1 \leq A_i \leq 10^9$
  • 入力はすべて整数である。

部分点

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

  1. ($300$ 点)
  • $1 \leq A_i \leq 5000$
  1. ($300$ 点)
  • 追加の制約はない。

入力

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

$N$

$A_1$ $A_2$ $\cdots$ $A_N$

出力

$F - S$ の値を出力せよ。

入力例 1
1 5
出力例 1
3

先手橋くんが最初 $(i, x, y) = (1, 1, 2)$ とすると、$A = (2, 2)$ となります。この後後手木くんがどのように操作しても先手橋くんは勝つことができます。
先手橋くんは最初の操作でおいしい石を食べることができるため、合計で $3$ のうれしさを得ることができます。

この入力は部分点 $1$ の制約を満たします。

入力例 2
5 1 1 1 1 1
出力例 2
-2

条件を満たす $i, x, y$ の組合せは存在しないため、先手橋くんはゲームに負けます。どちらのプレイヤーもおいしい石を食べることができない場合があることに注意してください。

この入力は部分点 $1$ の制約を満たします。

提出
C++23 (g++ 12.2.0)