Codeforces Round #552 (Div. 3) B题

题目链接: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 } 
View Code

猜你喜欢

转载自www.cnblogs.com/duxing201806/p/10726401.html