这是一道哈希表的题
前面几位大佬都分析过题面,蒟蒻就暂且不分析了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;
}