codeforces#371 B.Filya and Homework
来源:互联网 发布:警察 两种人 程序员 编辑:程序博客网 时间:2024/06/06 08:40
Today, hedgehog Filya went to school for the very first time! Teacher gave him a homework which Filya was unable to complete without your help.
Filya is given an array of non-negative integers a1, a2, ..., an. First, he pick an integer x and then he adds x to some elements of the array (no more than once), subtract x from some other elements (also, no more than once) and do no change other elements. He wants all elements of the array to be equal.
Now he wonders if it's possible to pick such integer x and change some elements of the array using this x in order to make all elements equal.
The first line of the input contains an integer n (1 ≤ n ≤ 100 000) — the number of integers in the Filya's array. The second line containsn integers a1, a2, ..., an (0 ≤ ai ≤ 109) — elements of the array.
If it's impossible to make all elements of the array equal using the process given in the problem statement, then print "NO" (without quotes) in the only line of the output. Otherwise print "YES" (without quotes).
51 3 3 2 1
YES
51 2 3 4 5
NO
In the first sample Filya should select x = 1, then add it to the first and the last elements of the array and subtract from the second and the third elements.
...当时意识模糊读错题,以为x只能从这n个数中取,导致看了好久好久心态爆炸。
只有两种情况,一是把所有的数都变成这个序列的平均数,即判断小的数加上的x和大的数减去的x是否相等
二是这个序列只有两种数,无论怎么去中间值都不能得出相等的x但是这种序列可以靠小的数+(大的数-小的数) 得出
比如 1 10就可以让1+9。所以这种情况时一定可以成功的。
代码如下:
#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>#include<cstring>using namespace std;#define N 100010#define inf 2000000000000000llint a[N],b[N];int main(){ int T,i,j,n,m; while(scanf("%d",&n)!=EOF){ for(i=1;i<=n;i++) { scanf("%d",&a[i]); b[i]=a[i]; } sort(a+1,a+1+n); sort(b+1,b+1+n); long long int mid=(a[n]-a[1])/2+a[1]; int flag; for(i=1;i<=n;i++){ if(a[i]==mid) {a[i]=0;continue;} if(a[i]>mid){ a[i]-=mid;continue;} else if(a[i]<mid) a[i]=mid-a[i]; } long long int sum=0; flag=1; for(i=1;i<=n;i++) { if(a[i]==0) continue; if(a[i]==sum) continue; if(sum==0&&a[i]!=0) sum+=a[i]; if(sum!=0&&a[i]!=sum) {flag=0;break;} } //2 1000000000 int cnt=0; for(i=1;i<=n;i++){ if(b[i]==b[1]||b[i]==b[n]) cnt++; } if(cnt==n) flag=1; if(flag) {cout<<"YES"<<endl;} else cout<<"NO"<<endl; } return 0;}
- Codeforces 371B - Filya and Homework(思维)
- codeforces#371 B.Filya and Homework
- Codeforces Round #371 (Div. 2) B. Filya and Homework
- Codeforces Round #371 (Div. 2)B. Filya and Homework
- Codeforces #371(Div.2)B. Filya and Homework【思维】
- Codeforces Round #371 (Div. 2) B. Filya and Homework
- Codeforces Round #371 (Div. 2)B. Filya and Homework
- Codeforces Round #371 (Div. 2) B-Filya and Homework【思维】
- B. Filya and Homework
- CF #371 div2 B. Filya and Homework
- Codeforces Problem 714B Filya and Homework(分类讨论)
- codeforces 714B Filya and Homework (水)
- CodeForces 714B. Filya and Homework(模拟)
- Codeforces Round #371 (Div. 2) B. Filya and Homework(水题 分类讨论)
- Codeforces Round #371 (Div. 2) B. Filya and Homework STL(map or set)
- Codeforces Round #371 (Div. 2) B. Filya and Homework(水题)
- CodeForces 712D Filya and Homework
- 【31.95%】【CF 714B】Filya and Homework
- 关于java中split的使用
- HDU 5879 Cure 2016 ACM/ICPC Asia Regional Qingdao Online 1002
- restTemplate使用及中文乱码问题
- 排序算法(四)——二分查找算法
- 基础1
- codeforces#371 B.Filya and Homework
- UML行为建模图——— 顺序图
- redis + spring 基本操作
- HUD 5883 The Best Path(2016亚洲区青岛站网络赛)
- 基础2
- java 字符串split有很多坑,使用时请小心!!
- HDU 5881 Tea 2016 ACM/ICPC Asia Regional Qingdao Online 1004
- UML行为建模图——— 活动图
- 计算机原理学习(序)