hiro1729 競プロ

競プロの解説などを書きます。

ABC078-D 解説

D - ABS

$N=1$ のときは $X$ さんが $1$ 枚取るしかないため答えは $|a_1 - W|$ です。

$2 \le N$ のときは、$X$ さんが最初の操作で全てのカードを取るとスコア $|a_N - W|$ を達成できます。また、最初の操作で $N-1$ 枚のカードを取る、つまり $1$ 枚だけ残すとスコア $|a_{N-1} - a_N|$ を達成できます。$X$ さんが $2$ 枚以上残したとき、$Y$ さんが残り $1$ 枚になるまでカードを取るとスコアは $|a_{N-1} - a_N|$ となります。よって、$X$ さんがカードを $2$ 枚以上残した時、$Y$ さんがスコアを最小化するので、スコアは $|a_{N-1} - a_N|$ 以下になります。$X$ さんはスコアを最大化するので、$2$ 枚以上残す意味はなくなります。よって、答えは $max(|a_N - W|, |a_{N-1} - a_N|)$ です。

N, Z, W = map(int, input().split())
a = list(map(int, input().split()))
if N == 1:
    print(abs(W - a[0]))
else:
    print(max(abs(a[N - 1] - W), abs(a[N - 2] - a[N - 1])))
#include <bits/stdc++.h>
using namespace std;

int main() {
    int N, Z, W;
    cin >> N >> Z >> W;
    vector<int> a(N);
    for (int i = 0; i < N; i++) {
        cin >> a[i];
    }
    if (N == 1) {
        cout << abs(W - a[0]) << '\n';
    } else {
        cout << max(abs(a[N - 1] - W), abs(a[N - 2] - a[N - 1])) << '\n';
    }
}