B. Make Them Equal

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Hepburn_Sunsir/article/details/89360017

http://codeforces.com/contest/1154/problem/B

"写下这个题的特别之处: 我当时处理逻辑很乱;问题有点复杂,你要考虑多种情况;还有数组做指针使用的技巧”

#include<cstdio>
#include<vector>
#include<algorithm>
#include<queue>
#include<iostream>
#include<cmath>
using namespace std;

int a[110];
int b[110];

int main(){
    //freopen("in.txt","r",stdin);
    int n;
    scanf("%d",&n);
    for(int i=0; i<n; i++){
        scanf("%d",&a[i]);
        b[a[i]]++;
    }
    int num=0;
    for(int i=0;i<101;i++){
        if(b[i]!=0) num++;
    }
   // printf("%d\n",num);
    if(num==1){
        printf("0\n");
    }
    else if(num==2){
        sort(a,a+n);
        int mm=0;
        for(int i=0;i<n-1;i++){
            mm=mm+a[i+1]-a[i];
        }
        if(mm%2!=0)
            printf("%d\n",mm);
        else printf("%d\n",mm/2);
    }
    else if(num==3){
        int i=0;
        int x=0,y=0,z=0;
        for(;i<101;i++){
            if(b[i]!=0){
                x=i;
                break;
            }
        }i++;
        for(;i<101;i++){
            if(b[i]!=0){
                y=i;
                break;
            }
        }i++;
        for(;i<101;i++){
            if(b[i]!=0){
                z=i;
                break;
            }
        }
        if(y-x == z-y){
            printf("%d\n",y-x);
        }
        else printf("-1\n");
    }
    else printf("-1\n");
    return 0;
}

猜你喜欢

转载自blog.csdn.net/Hepburn_Sunsir/article/details/89360017