• 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 //               等于三种    最小+最大== 两倍中间 
  • 相关阅读:
    dedecms织梦修改标题默认长度
    Python正课68 —— 实现面向对象编程
    Python正课67 —— 面向对象介绍
    Win10系统下提示VMware与Device/Credential Guard不兼容的解决方法
    周考5 月考1 内容
    Python正课66 —— ATM + 购物车 小有成就
    Python正课65 —— ATM + 购物车 架构
    Python正课64 —— re模块
    Python正课63 —— logging模块
    Python正课62 —— subprocess模块
  • 原文地址:https://www.cnblogs.com/liuzhuan-xingyun/p/12717921.html
Copyright © 2020-2023  润新知