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的序列的主要内容,如果未能解决你的问题,请参考以下文章

csp-M3-瑞神的序列

csp-M3-C-咕咕东学英语

csp-M3-C-咕咕东学英语

csp-M3-消消乐大师-Q老师

csp-M3-消消乐大师-Q老师

程序设计思维与实践 CSP-M1 补题 (3/4/数据班)