题目链接:http://codeforces.com/contest/1154/problem/B
题目大意:给出n个数,每个数都可以加上或减去这个一个数D,求对这n个数操作之后当所有数都相等时,D的最小值。
题解:先考虑一些情况,这n个数如果只有一种,也就是,全部都相等,D显然是0,那如果是两种数,a 和 b,a<b,如果想让D最小
且D是整数,那么当b - a为偶数,D是 (b-a)/2-a,反之是b-a,当是三种数a,b,c,a<b<c时,显然必须b-a=c-b,否则输出-1,其他情况也是-1
1 #include<bits/stdc++.h> 2 using namespace std; 3 int a[1000],b[1000]; 4 int main() 5 { 6 int n,flag=0,tot=0; 7 cin>>n; 8 for(int i=1;i<=n;i++) cin>>a[i]; 9 sort(a+1,a+1+n); 10 for(int i=1;i<=n-1;i++) 11 { 12 if(a[i]!=a[i+1]) 13 { 14 flag++; 15 } 16 } 17 if(flag==0) printf("0\n"); 18 else if(flag==1) { 19 for(int i=1;i<=n-1;i++) 20 { 21 if(a[i]!=a[i+1]) 22 { 23 if((a[i]+a[i+1])%2==0) cout<<(a[i]+a[i+1])/2-a[i]<<endl; 24 else cout<<a[i+1]-a[i]<<endl; 25 } 26 } 27 } 28 else if(flag==2) { 29 for(int i=1;i<=n-1;i++) 30 { 31 if(a[i]!=a[i+1]) 32 { 33 b[++tot]=a[i+1]-a[i]; 34 } 35 } 36 if(b[1]==b[2]) cout<<b[1]<<endl; 37 else { 38 cout<<-1<<endl;return 0; 39 } 40 } 41 else { 42 cout<<-1<<endl;return 0; 43 } 44 }