https://atcoder.jp/contests/abc255/tasks/abc255_e

\(A_1 = \alpha\) とおくと、

  • \(A_2 = S_1 - A_1 = S_1 - \alpha\)
  • \(A_3 = S_2 - A_2 = S_2 - S_1 + \alpha\) … となることがわかる。

\(T_1 = 0, T_k = \sum_{i=1}^{k-1} (-1)^{i+k+1}S_k\) とおくと、どんな \(A\) に対しても、 ある \(\alpha\) が存在して \(A_k = T_k + (-1)^{k+1} \alpha\) が全ての \(k\) に対して成り立つことがわかる。

\(F(i,\alpha) = |\{ k \mid T_k + (-1)^{k+1} \alpha = X_i \} |\) とする。 これは、 \(i, \alpha\) に対して、\(X_i = T_k + (-1)^{k+1} \alpha\) となる \(k\) を数えていることになる。\(T, X\) の条件から \(F(i,\alpha) \neq 0\) となる \(\alpha\) は絞り込むことができる。

あとは、\(i\) を動かして \(\sum_i F(i,\alpha)\) の最大値を取れば良い。

https://atcoder.jp/contests/abc255/submissions/32403143