B. Make Them Equal
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
You are given a sequence a1,a2,…,an
consisting of n
integers.
You can choose any non-negative integer D
(i.e. D≥0), and for each ai
you can:
add D
(only once), i. e. perform ai:=ai+D
, or
subtract D
(only once), i. e. perform ai:=ai−D
, or
leave the value of ai
unchanged.
It is possible that after an operation the value ai
becomes negative.
Your goal is to choose such minimum non-negative integer D
and perform changes in such a way, that all ai are equal (i.e. a1=a2=⋯=an
).
Print the required D
or, if it is impossible to choose such value D
, print -1.
For example, for array [2,8]
the value D=3 is minimum possible because you can obtain the array [5,5] if you will add D to 2 and subtract D from 8. And for array [1,4,7,7] the value D=3 is also minimum possible. You can add it to 1 and subtract it from 7 and obtain the array [4,4,4,4]
.
Input
The first line of the input contains one integer n
(1≤n≤100) — the number of elements in a
.
The second line of the input contains n
integers a1,a2,…,an (1≤ai≤100) — the sequence a
.
Output
Print one integer — the minimum non-negative integer value D
such that if you add this value to some ai, subtract this value from some ai and leave some ai
without changes, all obtained values become equal.
If it is impossible to choose such value D
, print -1.
Examples
Input
Copy
6
1 4 4 7 4 1
Output
Copy
3
Input
Copy
5
2 2 5 2 5
Output
Copy
3
Input
Copy
4
1 3 3 7
Output
Copy
-1
Input
Copy
2
2 8
Output
Copy
3
当时晚上我考虑的是除了最大值和最小值外,另外的一个数t,如果max-t=t-min,那么输出max-t,当只有2种数的时候就输出差值或者差值的一半,但是没想到数的种类(不同的数)不能为3个以上,第二天起来看就被hack掉了,痛苦掉分(哭唧唧)。
一下是我修改后的代码。
#include<bits/stdc++.h>
using namespace std;
int main(void)
{
ios::sync_with_stdio(false);
int n,t;
while(cin>>n)
{
set<int>p;
while(n--)
{
cin>>t;
p.insert(t);
}
if (p.size()==1)
cout<<"0"<<endl;
else if (p.size()==2)
{
int x=*p.rbegin()-*p.begin();//已经排好序了,直接用后面的减去前面的
if (x%2==0)
cout<<x/2<<endl;
else cout<<x<<endl;
}
else if (p.size()==3)
{
int a=*p.begin();
int b=*(++p.begin());
int c=*p.rbegin();
if (c-b==b-a)
cout<<c-b<<endl;
else cout<<"-1"<<endl;
}
else cout<<"-1"<<endl;
}
return 0;
}