题目链接:codeforces.com/problemset/problem/1183/B
题意:给你 n 个数,每个数能在k范围内上下浮动,求能否使所有数相等,能输出相等的最大值,不能输出 -1.
思路: 因为要求最大,所以将所有数向上浮动k,找到他们的最大最小值,如果相差不超过2*k,最小值即为答案。
AC代码:
1 #include<bits/stdc++.h> 2 using namespace std; 3 int main() 4 { 5 int t; 6 cin >> t; 7 while(t--) 8 { 9 int n; 10 int k; 11 int a; 12 cin >> n >> k; 13 cin >> a; 14 int mi = a + k,ma = a + k; 15 for(int i = 1;i < n;i++) 16 { 17 cin >> a; 18 if(mi > a + k) mi = a + k; 19 if(ma < a + k) ma = a + k; 20 } 21 if(ma - mi <= 2*k) cout << mi << endl; 22 else cout << -1 << endl; 23 } 24 return 0; 25 }