码迷,mamicode.com
首页 > 其他好文 > 详细

CSP-M2-A-HRZ的序列

时间:2020-04-17 12:35:10      阅读:62      评论:0      收藏:0      [点我收藏+]

标签:class   b站   while   不包含   return   包含   相等   csp   count   

题目描述

相较于咕咕东,瑞神是个起早贪黑的好孩子,今天早上瑞神起得很早,刷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的序列

标签:class   b站   while   不包含   return   包含   相等   csp   count   

原文地址:https://www.cnblogs.com/liuzhuan-xingyun/p/12717921.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!