首页 > 代码库 > Codeforces Round #371 (Div. 2)B. Filya and Homework
Codeforces Round #371 (Div. 2)B. Filya and Homework
题目链接:http://codeforces.com/problemset/problem/714/B
题目大意:
第一行输入一个n,第二行输入n个数,求是否能找出一个数x,使得n个数中的部分数加上x或部分数减去x ,n个数相等。
例如:5
1 3 3 2 1
输出:
YES
Init:
x=1 情况,第一个数和最后一个数+x,第二三个数减去x ,则这n个数都为2(相等),故输出“YES”
解题思路:
对于刚才举的例子 可知 n个数只有三个元素 1 2 3 只要使得 2-1==3-2 即可满足条件
用一个数组存储n 个数,进行排序和查重。
如果查重后的元素<=2 即只有一个元素或两个元素则肯定满足条件输出“YES”
或者查重后的元素有三个 且 narr[1]-narr[0]==narr[2]-narr[1] (这里用到了排序) 则也输出“YES”
其他情况输出NO.
AC Code:
1 #include<bits/stdc++.h> 2 using namespace std; 3 int na[1000001]; 4 int main() 5 { 6 int n,i; 7 while(scanf("%d",&n)!=EOF) 8 { 9 for(i=0; i<n; i++)10 scanf("%d",&na[i]);11 sort(na,na+n);12 int cut=unique(na,na+n)-na;13 if(cut<=2||(cut==3&&(na[1]-na[0]==na[2]-na[1])))14 cout<<"YES"<<endl;15 else16 cout<<"NO"<<endl;17 }18 return 0;19 }
Codeforces Round #371 (Div. 2)B. Filya and Homework
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。