知识点模拟
描述
对于给定的由 nn 个整数组成的数组 {a1,a2,...,an}{a1,a2,...,an},我们称其为数独数组,当且仅当其每一个长度为 99 的连续子数组,都包含 1∼91∼9 这 99 个数字。
现在,对于给定的数组,是否存在一种方案,使得其经过重新排序后成为数独数组?如果是,直接输出 YESYES;否则,输出 NONO。注意,您不必给出具体的排序方案。
输入描述:
第一行输入一个整数 n(9≦n≦105)n(9≦n≦105) 代表数组中的元素数量。
第二行输入 nn 个整数 a1,a2,...,an(1≦ai≦9)a1,a2,...,an(1≦ai≦9) 代表数组元素。
输出描述:
如果数组在重新排序后可以成为数独数组,输出 YESYES;否则,输出 NONO。
示例1
输入:
9
1 2 3 4 5 6 7 9 8
复制输出:
YES
复制说明:
在这个样例中,不需要经过重新排序,数组已经是一个数独数组。
示例2
输入:
9
1 2 3 4 5 6 7 8 1
复制输出:
NO
cpp
// #牛客春招刷题训练营# https://www.nowcoder.com/discuss/726480854079250432
#include <algorithm>
#include <array>
#include <iostream>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);cin.tie(0),cout.tie(0);
int x, n;
array<int, 9> a{0};
cin >> n;
for (int i = 0; i < n; i++){
cin >> x;
a[x - 1]++;//---------计数,计算每个数字出现的次数
}
sort(a.begin(), a.end());
if (a[8] - a[0] > 1)//--------如果出现次数最多的数字的出现次数 - 出现次数最少的数字的出现次数 > 1;就不能实现,否则只需将多出来的部分放在最前面就好了
cout << "NO";
else cout << "YES";
}
// 64 位输出请用 printf("%lld")