• Week8 CSP-M2 A


    题目描述:

    相较于咕咕东,瑞神是个起早贪黑的好孩子,今天早上瑞神起得很早,刷B站时看到了一个序列a,他对这个序列产生了浓厚的兴趣,他好奇是否存在一个数K ,使得一些数加上K,一些数减去 K,一些数不变,使得整个序列中所有的数相等,其中对于序列中的每个位置上的数字,至多只能执行一次加运算或减运算或是对该位置不进行任何操作。由于瑞神只会刷B站,所以他把这个问题交给了你!

    输入输出规模及约定:

    输入第一行是一个正整数T表示数据组数。 接下来对于每组数据,输入的第一个正整数N表示序列 的长 度,随后一行有N个整数,表示序列 a。

    输出共包含T行,每组数据输出一行。对于每组数据,如果存在这样的K,输出"YES",否则输出“NO”。 (输出不包含引号)

    思路:

    很显然,如果不同的数超过了四个,就不可以。

    如何判断一共有多少个不同的数?用桶?

    更好的办法是用集合。

    代码:

    #include <cstdio>
    #include <iostream>
    #include <set>
    #include <vector>
    #include <algorithm>
    typedef long long ll;
    using namespace std;
    set<ll> S;
    vector<ll> v;
    int main()
    {
    	int T; cin>>T;
    	while(T--)
    	{
    		S.clear();
    		v.clear();
    		int n; cin>>n;
    		for(int i=1;i<=n;i++)
    		{
    			ll val;
    			scanf("%lld",&val);
    			S.insert(val);
    		}
    		if(S.size()>3) cout<<"NO"<<endl;
    		else if(S.size()==1||S.size()==2) cout<<"YES"<<endl;
    		else
    		{
    			for(auto x:S)
    				v.push_back(x);
    			sort(v.begin(),v.end());
    			if(v[1]-v[0]==v[2]-v[1]) cout<<"YES"<<endl;
    			else cout<<"NO"<<endl;
    		}
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    Windows Phone7 开发工具简介
    peration not supported. Unknown error: 0x8973190e
    C/C++学习建议(摘抄自:程序员2010年8月P61页)
    OpenOffice/LibreOffice的行距问题
    Finder打开剪切功能
    设备资源管理系统-用户管理
    设备资源管理系统-数据字典
    设备资源管理系统-代办事宜
    设备资源管理系统-首页显示
    设备资源管理系统-DAO底层方法-查询
  • 原文地址:https://www.cnblogs.com/qingoba/p/12719465.html
Copyright © 2020-2023  润新知