版权声明:《本文为博主原创文章,转载请注明出处。 》 https://blog.csdn.net/zbq_tt5/article/details/88954751
题目链接:CodeForces - 1051C
题目类型:
模拟题
题意:
给一组数据,只出现一次的称为好糖,现在要给男生女生分糖,要求男生女生得到的好糖数相同,如果能够分的话输出YES+分糖的顺序,如果不能的话输出NO
关键点是坏糖可以拆分成好糖,比如1 1,可以把1给女生,把另一个1给男生,这样男生女生都得到了一个好糖
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#include<string>
using namespace std;
string num_puts="";
int a[1100],num[1100],better,bad,max_number,num_number;
int main()
{
int n;
cin>>n;
for(int i=1; i<=n; ++i)
cin>>a[i],num[a[i]]++;
for(int i=1; i<=n; ++i)
{
if(num[a[i]]==1)
++better;
else
{
++bad;
if(num[a[i]]>max_number)
{
max_number=num[a[i]];
num_number=a[i];
}
}
}
if(better%2==0)
{
printf("YES\n");
int indexx=1;
for(int i=1; i<=n; ++i)
{
if(num[a[i]]==1&&indexx==1)
{
indexx=(indexx+1)%2;
num_puts+='A';
}
else if(num[a[i]]==1&&indexx==0)
{
indexx=(indexx+1)%2;
num_puts+='B';
}
else if(num[a[i]]>1)
{
num_puts+='A';
}
}
}
else//代表糖为奇数
{
int indexx=1;
int flag=0;
if(max_number>2)
{
printf("YES\n");
for(int i=1; i<=n; ++i)
{
if(num[a[i]]==1&&indexx==1)
{
indexx=(indexx+1)%2;
num_puts+='A';
}
else if(num[a[i]]==1&&indexx==0)
{
indexx=(indexx+1)%2;
num_puts+='B';
}
else if(num_number==a[i]&&flag==0)
{
num_puts+='B';
flag=1;
}
else
num_puts+='A';
}
}
else
{
printf("NO\n");
}
}
cout<<num_puts<<endl;
return 0;
}