生命不息,奋斗不止

题解 CF864A 【Fair Game】

2020-08-24 14:37:12


这是一道哈希表的题

前面几位大佬都分析过题面,蒟蒻就暂且不分析了QwQ


用哈希表来存储所有的元素,然后扫描,用计数器记下一共够多少种数。(>3种数就直接输出NO)之后,看俩个数数量是否相等,相等就可以输出YES了。整体思路就是用到一个数组和一个哈希表


上代码:

C++ CODE

#include<bits/stdc++.h>
using namespace std;
int a[105],x[105];
int main()
{
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>x[i];//无脑输入
        a[x[i]]++;//存入哈希表
    }
    int cnt=0; 
    bool flag=false;//确认是否有成对情况
    int ai,aj;
    for(int i=1;i<=100;i++)
    {
        for(int j=1;j<=100;j++)
        {
            if(i!=j && a[i]==a[j] && a[i]!=0)
            {
                cnt++;//发现一种数,计数器+1
                flag=true;//发现成对情况,状态改变
            }
        }
    }
    if(flag==true && cnt==2)//两种判断条件上边都讲过
    {
        cout<<"YES"<<endl;
        cout<<x[1]<<" ";//第一种绝对可以取,先取出来
        for(int i=2;i<=n;i++)
        {
            if(x[i]!=x[1]) //发现另一种
            {
                cout<<x[i]<<endl;//输出另一种
                return 0;//直接结束程序
            }
        }
    } 
    else cout<<"NO"<<endl;//不符合就输出NO
    return 0;
}
萌新初次写题解,求管理大大给过 :(