Official

C - 無線ネットワークの構築 / Building a Wireless Network Editorial by kyopro_friends


予めソートすることで、 \(X\) は昇順になっているとしてよいです。

求める答えは \(\max \{X_{i+1}-X_i \mid 1 \leq i \leq N-1\}\) になります。

証明:

  • この値で通信可能となること
    任意の基地局 \(i,j\) 間は \(i,i+1,i+2,\dots,j\) のように中継することで通信可能
  • この値未満では通信可能でないこと
    \(X_{i+1}-X_i\) が最大になる \(i\) を任意に \(1\) つ取ると、 \(1,2,\ldots,i\)\(i+1,i+2,\ldots,N\) は互いに直接通信できず、特に他を中継しても通信できない

実装例 (C++)

#include<bits/stdc++.h>
using namespace std;

int main(){
  int n;
  cin >> n;
  vector<int>a(n);
  for(int i=0; i<n; i++) cin >> a[i];
  sort(a.begin(), a.end());

  int ans=0;
  for(int i=0; i<n-1; i++){
    ans = max(ans, a[i+1] - a[i]);
  }
  cout << ans << endl;
}

実装例 (Python)

N = int(input())
A = list(map(int, input().split()))
A.sort()

ans = 0
for i in range(N-1):
  ans = max(ans, A[i+1] - A[i])

print(ans)

posted:
last update: