Make Them Equal

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
inputCopy
6
1 4 4 7 4 1
outputCopy
3
inputCopy
5
2 2 5 2 5
outputCopy
3
inputCopy
4
1 3 3 7
outputCopy
-1
inputCopy
2
2 8
outputCopy
3

思路:三种情况,一个数字,两个数,三个数,三个以上
分别判断
只有两个数的时候存在最小值一说
一个数输出0
三个数存数组中,sort,找区间差,区间差不同则输出-1
四个以上直接-1

#include<cstring>
#include<cstdlib>
#include<string>
#include<ctime>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<map>
#include<stack>
#include<set>
#include<queue>
#include<vector>
#define ll long long
using namespace std;

int main() {
	ll m;
	while (cin >> m) {
		ll s[105];
		ll a[105];
		ll c[105];
		memset(s, 0, sizeof(s));
		for (ll i = 0; i < m; i++) {
			cin >> a[i];
			s[a[i]]++;
		}
		ll n = 0;
		for (ll i = 0; i < 105; i++) {
			if (s[i] != 0) {
				c[n] = i;
				n++;
			}
		}
		if (n > 3) {
			cout << "-1" << endl;
			continue;
		}
		if (n == 1) {
			cout << "0" << endl;
			continue;
		}
		if (n == 2) {
			sort(c, c + 2);
			ll d = c[1] - c[0];
			if (d % 2 == 0) {
				cout << (d / 2) << endl;
			}
			else {
				cout << d << endl;
			}
			continue;
		}
		if (n == 3) {
			sort(c, c + 3);
			ll dd = c[1] - c[0];
			if (c[2] - c[1] != dd) {
				cout << "-1" << endl;
				continue;
			}
			else {
				cout << dd << endl;
				continue;
			}
		}
	}
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值