题目链接:https://vjudge.net/problem/CodeForces-864A
题意:给你偶数个卡片,每个卡片有一个编号,两个人每个人选一个序号,选了这儿序号意味着,这个人要拿走所有该序号的卡片,如果所有的卡片都被拿走,并且两个人的卡片数量一样多,输出YES 和 两个序号 否则输出NO。
注意:要把所有的牌拿走(既然一人拿一次,那么拿的牌的数量肯定每种卡片的数量是总数的一半
#include<iostream>
#include<vector>
using namespace std;
int n;
int a[1005],b[1005];
int main()
{
cin>>n;
vector<int> m;
for(int i=0;i<n;i++)
{
cin>>a[i];
b[a[i]]++;
}
bool f=true;
for(int i=0;i<=100;i++)
{
if(b[i]!=0&&b[i]*2!=n)//注意b[i]*2!=n的使用
f=false;
if(b[i]>=1)
m.push_back(i);
}
if(!f)
cout<<"NO"<<endl;
else
cout<<"YES"<<endl<<m[0]<<" "<<m[1]<<" "<<endl;
return 0;
}
vector m是定义了一个vector容器,元素类型为vector,
初始化为包含m个vector对象,每个对象都是
一个新创立的vector对象的拷贝,而这个新
创立的vector对象被初始化为包含n个0。
因此vector(n)表示构造一个无名且含n
个0的vector对象。从结果上看,类似于创建了
一个m×n的二维数组,而且可以通过
v[i][j]的方式来访问元素(vector支持下标访问元素)。