0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

AtCoderログ:0095 - ABC 160 C

Last updated at Posted at 2021-08-28

問題

問題文

$1$ 周 $K$ メートルの円形の湖があり、その周りに $N$ 軒の家があります。
$i$ 番目の家は、湖の北端から時計回りに $A_i$ メートルの位置にあります。
家の間の移動は、湖の周りに沿ってのみ行えます。
いずれかの家から出発して $N$ 軒すべての家を訪ねるための最短移動距離を求めてください。

制約

・$2 \le K \le 10^6$
・$2 \le N \le 2×10^5$
・$0 \le A_1 < \ldots < A_N < K%
・入力中のすべての値は整数である。

収録されている問題セット

回答

回答1 (AC)

$i-1$ 番目の家と $i$ 番目の家の距離は $A_i-A_{i-1}$ なので、$i$ 番目の家を出発して時計回りにそれぞれの家を訪ね、最後に $i-1$ 番目の家を訪ねるときの移動距離は $K-(A_i-A_{i-1})$ となります。後は $i$ を変化させたときの最小値を求めれば良いでしょう。ただし $i \ge 2$ でなければならないので、$i=1$ の場合は別扱いが必要なことに注意してください。コードは以下のようになりました。

abc160c-1.cpp
#include <bits/stdc++.h>
using namespace std;

int main() {
  int k, n;
  cin >> k >> n;

  vector<int> a(n);
  for ( int i=0; i<n; i++ ) {
    cin >> a.at(i);
  }
  
  int dmin = a.at(n-1)-a.at(0);
  for ( int i=1; i<n; i++ ) {
    dmin = min( dmin, k-(a.at(i)-a.at(i-1)) );
  }
  
  cout << dmin << endl;
}

調べたこと

AtCoder の解説ユーザ解説

回答1と同じ方針でした。

AtCoder の解説コンテスト全体の解説

回答1と同じ方針でした。

リンク

前後の記事

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?