做的成功的地方网站,关于做电影的网站设计,深圳进出口贸易有限公司,大连企业网站建站模板题意#xff1a;把数组分成两个集合 每个集合中元素数量为1的个数相同#xff08;此个数可以是0#xff09;
分析#xff1a; 这类问题就是要各种可能情况考虑到 然后分类讨论 完整地正确分类就AC 否则gg 如果数量为1的元素数为偶数个 对半分 如果元素数量… 题意把数组分成两个集合 每个集合中元素数量为1的个数相同此个数可以是0
分析 这类问题就是要各种可能情况考虑到 然后分类讨论 完整地正确分类就AC 否则gg 如果数量为1的元素数为偶数个 对半分 如果元素数量为1的元素数为奇数个 分类讨论 如果有元素数3的元素 抽一个分到少的那一半 如果没有 就输出NO CF的数据好厉害啊。。。 需要注意的是如果数量为1的元素的个数是1个的话 此时有多个数量大于等于3的元素 需要把后者其中一个放到1组里 前者另一组....
#includeiostream
#includecstdio
#includewindows.h
using namespace std;
const int maxn 110;
int a[maxn],cnt[maxn],cnt_N[maxn];
int main()
{int n;scanf(%d,n);for(int i1;in;i){scanf(%d,a[i]);cnt[a[i]];}for(int i1;in;i){if(cnt[a[i]]3)cnt_N[3];else cnt_N[cnt[a[i]]];}if(cnt_N[1]%20){int A cnt_N[1]/2;puts(YES);for(int i1;in;i){if(cnt[a[i]]1){if(A!0)putchar(A),A--;else putchar(B);}else putchar(B);}}else if(cnt_N[1]%21){if(cnt_N[3]0)puts(NO);else {puts(YES);int c0,mid cnt_N[1]/2;//整除容易留坑if(mid0)c;bool flag0;for(int i1;in;i){if(cnt[a[i]]1){c;if(cmid)putchar(A);else putchar(B);}else if(cnt[a[i]]3){if(!flag)putchar(A),flag1;else putchar(B);}else putchar(B);}}}return 0;
}