公式
C - 無線ネットワークの構築 / Building a Wireless Network 解説
by
C - 無線ネットワークの構築 / Building a Wireless Network 解説
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)
投稿日時:
最終更新:
