10 条题解

  • 0
    @ 2024-7-5 11:59:49

    考察知识点: 构造法

    首先考虑无解的情况,因为 nn 是偶数,所以当数列中出现了 xx 种不同的数字,且 xx 为奇数时,无解,输出 1-1

    接着就是有解的情况,把 xx 个数字全都输出,由于 xx 是偶数,且每个数字有且仅有出现了 11 次,所以偶数个数字构成的序列中数字种类数必定为偶数。所有的都输出完毕了,后面只可能出现 xx 种数字,而 xx 又是偶数,所以可以直接按顺序直接输出。

    Code:

    #include <bits/stdc++.h>
    using namespace std;
    int a[100005];
    int main()
    {
        memset(a,0,sizeof a);
        int n,s = 0,ma = 0,x;
        cin >> n;
        for (int i = 1;i <= n;i++)
        {
            cin >> x;
            ma = max(ma,x);
            if (a[x] == 0) s++;
            a[x]++;
        }
        if (s % 2 == 1) 
        {
            cout << -1;
            return 0;
        }
        for (int i = 1;i <= ma;i++)
        {
            if (a[i] >= 1) 
            {
                cout << i << ' ';
                a[i]--;
            }
        }
        for (int i = 1;i <= ma;i++)
        {
            if (a[i] >= 1)
            {
                for (int j = 1;j <= a[i];j++)
                {
                    cout << i << ' ';
                }
            }
        }
        return 0;
    }
    

    信息

    ID
    2
    时间
    1000ms
    内存
    512MiB
    难度
    2
    标签
    递交数
    442
    已通过
    192
    上传者