首页 > 其他 > 详细

问题 D: 完美 (perfect)

时间:2020-06-12 22:08:07      阅读:51      评论:0      收藏:0      [点我收藏+]

题目描述

Vxlimo 有一个序列,序列有 n 个数,第 i 个是 ai。

然而 Vxlimo 是个完美主义者,他想把 n 个数变成一样的数,显然这很容易。

然而他也是一个懒货,他只想把每个数 +d 或 -d 一次(当然也可以不变)。

换句话说,选择一个数 d ,把每个 ai 变成 ai+d 或者 ai-d 或者不变。

Vxlimo 还有作业要做,你能帮他求出最小的 d 吗?

输入

第一行一个正整数 n。

第二行 n 个正整数,表示 ai。

输出

输出一行一个非负整数:最小的 d。

如果不存在这样的 d ,输出 -1。

样例输入 Copy

【样例1】
6
1 4 4 7 4 1
【样例2】
4
1 3 3 7

样例输出 Copy

【样例1】
3
【样例2】
-1

提示

对于100%的数据,1≤n≤100,1≤ai≤100
 
 
//终于成功了
#include <cmath>
#include <iostream>
#include <algorithm>

using namespace std;

const int N = 110;

int n;
int a[N], b[N];

int main(){
    cin >> n;
    for (int i = 1; i <= n; i ++ ) cin >> a[i];
    
    sort(a + 1, a + 1 + n);
    
    for (int i = 1; i <= n; i ++ ) {
        b[a[i]] ++;
    }
    
    int t = 0;
    int d[N];
    for (int i = 1; i <= 101; i ++ ){
        if (b[i] != 0) d[++ t] = i;

    }
    
    if (t == 1) cout << 0 << endl;
    else if (t == 2) cout << d[2] - d[1] << endl;
    else if (t == 3) {
        if (d[1] + d[3] == 2 * d[2]) cout << d[3] - d[2] << endl;
        else cout << "-1" << endl;
    }
    else cout << "-1" << endl;
    
    return 0;
}

  

 
//不知道那里错了,但是只有八十分,有哪位大神可以指出来吗
#include <cmath>
#include <iostream>

using namespace std;

const int N = 110;

int n;
int a[N];

int main(){
    cin >> n;
    for (int i = 0; i < n; i ++ ) cin >> a[i];
    
    int minn = 111, maxn = 0;
    for (int i = 0; i < n; i ++ ){
        minn = min(minn, a[i]);
        maxn = max(maxn, a[i]);
    }
    
    int x = maxn + minn >> 1;
    int y = maxn - x;
    bool t = true;
    
    for (int i = 0; i < n; i ++ ){
        if (abs(a[i] - x) != 0 && abs(a[i] - x) != y)
            t = false;
    }
    
    if (t) cout << y << endl;
    else cout << "-1" << endl;
    
    return 0;
}

  

问题 D: 完美 (perfect)

原文:https://www.cnblogs.com/Iamcookieandyou/p/13110262.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!