水题,直接开个桶统计一下,然后分类讨论即可。要求每个数至少出现一次,且max出现次数-min出现次数 <= 1即可。

具体构造方案类似于 789 123456789 1234...

如果出现次数不是连续的,比如 2 2 2 3 3 2 3 2 2而非 3 3 2 2 2 2 2 2 3, 也可以构造,因为按照题意,1到9的数字没任何区别,可以随意排序。

#include<bits/stdc++.h>
using i64 = long long;

int main() {
    std::cin.tie(nullptr)->sync_with_stdio(false);

    int n;
    std::cin >> n;
    std::vector<int> cnt(10);
    while (n--) {
        int x;
        std::cin >> x;
        cnt[x]++;
    }
    
    int mx = 0, mi = 1e8;
    for (int i = 1; i <= 9; i++) {
        if (!cnt[i]) {
            std::cout << "NO";
            return 0;
        }
        mx = std::max(mx, cnt[i]);
        mi = std::min(mi, cnt[i]);
    }

    if (mx - mi > 1) {
        std::cout << "NO";
        return 0;
    }
    
    std::cout << "YES";

    return 0;
}

https://www.nowcoder.com/discuss/727521113110073344