CSP-M2-A-HRZ的序列
Posted liuzhuan-xingyun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CSP-M2-A-HRZ的序列相关的知识,希望对你有一定的参考价值。
题目描述
相较于咕咕东,瑞神是个起早贪黑的好孩子,今天早上瑞神起得很早,刷B站时看到了一个序列a,他对这个序列产生了浓厚的兴趣,他好奇是否存在一个数K,使得一些数加上K,一些数减去K,一些数不变,使得整个序列中所有的数相等,其中对于序列中的每个位置上的数字,至多只能执行一次加运算或减运算或是对该位置不进行任何操作。由于瑞神只会刷B站,所以他把这个问题交给了你!
Input
输入第一行是一个正整数t表示数据组数。
接下来对于每组数据,输入的第一个正整数n表示序列a的长度,随后一行有n个整数,表示序列a。
Output
输出共包含t行,每组数据输出一行。对于每组数据,如果存在这样的K,输出"YES",否则输出“NO”。(输出不包含引号)
Sample Input
2
5
1 2 3 4 5
5
1 2 3 4 5
1
2
3
4
5
Sample Output
NONO
Solution:
Input -> sort--->count dif_nums;
如果输入的数据不同大小数目 小于三种,必有解;
等于三种,有解的充要条件为三个数构成等差数列
大于三种 无解
审题 注意数据范围 long long
为防止溢出,在判断等差数列的时候,
//if(b[1]+b[3]== 2*b[2])
//if(b[1]-b[2] == b[2] - b[3]
第二种更保险!
1 #include<iostream> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 int t,nums; 6 long long a[10010],tmp; 7 int cnt=0; 8 long long b[4]; 9 int main(){ 10 cin>>t; 11 while(t--){ 12 //初始化 13 tmp=-1; 14 cnt=0; 15 memset(a,0,sizeof(a)); 16 memset(b,0,sizeof(b)); 17 18 cin>>nums; 19 for(int i=0;i<nums;i++) 20 { 21 cin>>a[i]; 22 } 23 sort(a,a+nums); 24 for(int i=0;i<nums;i++) 25 if(tmp!=a[i]) 26 { 27 cnt++; 28 tmp=a[i]; 29 if(cnt<=3){ 30 b[cnt]=a[i]; 31 } 32 else 33 { 34 cnt=4; 35 break; 36 } 37 }; 38 if(cnt<=2) 39 cout<<"YES"<<endl; 40 else if(cnt>3) 41 cout<<"NO"<<endl; 42 else{ 43 //if(b[1]+b[3]== 2*b[2]) 44 if(b[1]-b[2] == b[2] - b[3]) 45 cout<<"YES"<<endl; 46 else 47 cout<<"NO"<<endl; 48 } 49 } 50 return 0; 51 } 52 //条件判断 小于等于两种数 可以 53 // 大于三种数 不可 54 // 等于三种 最小+最大== 两倍中间
以上是关于CSP-M2-A-HRZ的序列的主要内容,如果未能解决你的问题,请参考以下文章