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; }