はまやんはまやんはまやん

hamayanhamayan's blog

Traveling Salesman around Lake [AtCoder Beginner Contest 160 C]

https://atcoder.jp/contests/abc160/tasks/abc160_c

解説

https://atcoder.jp/contests/abc160/submissions/11325671

ある家iから出発してすべての家を回る最短経路はi -> i+1 -> i+2 -> ... -> N -> 1 -> 2 -> ... -> i-1という感じになる。
つまり、1パターンしかないということ。
この場合にかかる距離は、「家iから湖のスタート(x=Kの位置)+湖のスタート(x=0の位置)から家i-1」となる。
注意点として、家1から家Nへの最短経路は湖のスタートを通らないので最初に別途計算しておく。

実装でのchmin(a,b)はa=min(a,b)の短縮マクロとして使ってる。

int K, N, A[201010];
//---------------------------------------------------------------------------------------------------
void _main() {
    cin >> K >> N;
    rep(i, 0, N) cin >> A[i];

    int ans = A[N - 1] - A[0];
    rep(i, 1, N) {
        int i_to_start = K - A[i];
        int start_to_i1 = A[i - 1];
        chmin(ans, i_to_start + start_to_i1);
    }
    cout << ans << endl;
}