zoukankan      html  css  js  c++  java
  • Vasya and Multisets CodeForces

    题意:

      对输入的每个数都进行分配到两个多重集中,问分配完以后 每个多重集中的个数为1的元素是否相等  相等则输出一个分配方式, 不想等为NO

    解析:

      三种情况

      1、原数列中个数为1 的数的个数为偶数  YES 集合A中只有一半个数为1的数, 其它的数在集合B中即可

      2、原数列中个数为1的数的个数为奇数,且不存在个数大于等于3的数  NO

      3、原数列中个数为1的数的个数为奇数,存在个数大于等于3的数 YES  先照1分配完 然后 把个数大于等于3的那个数 拿出一个放到A中 其它在B即可 

     

    #include <bits/stdc++.h>
    using namespace std;
    //const int maxn = 10010, INF = 07fffffff;
    const int maxn = 1000;
    int d[maxn], vis[maxn];
    
    int main()
    {
        int flag = 0, tmp;
    
        int n, id = n-1;
        cin >> n;
        for(int i=0; i<n; i++)
        {
            cin >> d[i];
            vis[d[i]]++;
        }
        int ans = 0;
        for(int i=1; i<=100; i++)
        {
            if(vis[i] == 1)
                ans++;
            if(vis[i] >= 3)
                flag = 1, tmp = i;
        }
        for(int i=0; i<n; i++)
            if(vis[d[i]] == 1)
                id = i;
        if(!(ans & 1))
        {
            cout << "YES" << endl;
            int g = 0;
            for(int i=0; i<n; i++)
            {
                if(vis[d[i]] == 1 && g)
                    cout<< "A";
                else
                    cout<< "B";
                if(vis[d[i]] == 1)
                    g ^= 1;
            }
            return 0;
        }
    
        if(flag == 0)
            return puts("NO"), 0;
        cout << "YES" << endl;
        int cnt = 0, f = 0;
        for(int i=0; i<n; i++)
        {
            if(cnt < ans/2 && vis[d[i]] == 1)
            {
                cout << "B";
                cnt++;
            }
            else if(vis[d[i]] >= 3 && f == 0)
            {
                cout << "B";
                f = 1;
            }
            else
                cout << "A";
        }
        cout << endl;
    
        return 0;
    }
    自己选择的路,跪着也要走完。朋友们,虽然这个世界日益浮躁起来,只要能够为了当时纯粹的梦想和感动坚持努力下去,不管其它人怎么样,我们也能够保持自己的本色走下去。
  • 相关阅读:
    (转)SpringMVC学习总结
    Golang-函数的defer
    Golang-闭包
    Golang-匿名函数
    Golang-init()
    Golang-递归
    Golang-函数、包、变量的作用域
    Golang-for、break、continue、goto、return
    Golang-程序流程控制 if、switch
    Golang-进制、源码反码补码、位运算
  • 原文地址:https://www.cnblogs.com/WTSRUVF/p/9688361.html
Copyright © 2011-2022 走看看