原题:http://codeforces.com/contest/1154/problem/B
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class sakuragi {//开boolean used[]数组以元素本身值为下标时,注意负数的情况。但是这道题其实跟负数没关系
//number数组开3开小了,跟自己写的指针自增结构有关
//以后演草用标准完整的伪代码。气死我啦!
public static void main(String args[]) {
Scanner sc=new Scanner(System.in);
int n;
int m;
n=sc.nextInt();
Integer a[]=new Integer[n];
Integer number[]=new Integer[4];
boolean exist[]=new boolean[220];
int count=0;//2或者3
for(int i=0;i<n;i++) {
a[i]=sc.nextInt();
if(!exist[a[i]]) {//如果这个数是新数
exist[a[i]]=true;
number[count++]=a[i];
if(count>3) {
System.out.println("-1");
return;
}
}else {
continue;
}
}
int D;
Comparator<Integer>cmp=new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2-o1;
}
};
//System.out.println(a[0]+" "+a[1]+" "+a[2]);
Arrays.sort(number, 0,count, cmp);
//System.out.println(a[0]+" "+a[1]+" "+a[2]);
if(count==3) {
if((number[0]-number[2])%2!=0) {//如果max和min差不是偶数
//System.out.println("hh");
System.out.println("-1");
return;
}else {
D=(number[0]-number[2])/2;
if(number[1]+D==number[0]) {
System.out.println(D);
}else {
System.out.println("-1");
}
}
}else if(count==2){
if((number[0]-number[1])%2!=0) {
System.out.println(number[0]-number[1]);
}else {
D=(number[0]-number[1])/2;
System.out.println(D);
}
}else {//count=1
System.out.println("0");
}
}
}