Official

C - 災害に強い通信ネットワーク / Disaster-Resistant Communication Network Editorial by physics0523


一般性を失わず、 \(X_1 \le X_2 \le \dots \le X_N\) として構いません。以降、そのようにしたと仮定します。

答えは \(2 \times (X_N - X_1)\) です。
\(X_1-X_2\) 間、 \(X_2-X_3\) 間、…、 \(X_{N-1}-X_N\) 間と \(X_N-X_1\) 間とにケーブルを敷設することで、問題文の条件を満たすように敷設できます。

また、それ未満の長さの敷設であれば、 \(X_1 \le x \le X_N\) なるある座標 \(x\) についてケーブルが \(1\) 本であるようなものが存在します。

\(N \ge 3\) であることから、そのような座標 \(x\) の直近の左右どちらかの都市を取り除くことで、左右が分断されたネットワークを得ることができます。

実装例 (C++):

#include<bits/stdc++.h>

using namespace std;

int main(){
  int N;
  cin >> N;
  int low=1.1e9,high=-1.1e9;
  for(int i=0;i<N;i++){
    int X;
    cin >> X;
    low=min(low,X);
    high=max(high,X);
  }
  cout << 2*(high-low) << "\n";
  return 0;
}

posted:
last update: