pigstd 是一个可爱的男孩子。他在 NOI2022 中的众数一题定义了 10^610 6 个 std::deque 并没有 MLE。 题目描述 给定一个长度为 nn 的序列 aa,我们通过以下方式构造序列 bb: 初始时 b=ab=a。 依次对 bb 进行 kk 次操作,每次操作选择任意一个元素并将其修改为任意整数。 dXqwq 定义一个序列的众数为所有出现次数最大的数。例如 [1,1,4,5,1,4][1,1,4,5,1,4] 的众数为 11,而 [1,14,5,14,19,19,8,10][1,14,5,14,19,19,8,10] 的众数为 14,1914,19。 你需要求出有多少整数可能成为 bb 的众数。 输入格式 第一行输入两个整数 n,kn,k。 第二行输入 nn 个整数 a_ia i 。 输出格式 输出一个整数,代表可能成为众数的数的数量。 特别地,如果答案为正无穷,输出 pigstd。
时间: 2024-04-16 17:27:33 浏览: 105
根据题目描述,我们可以观察到序列 bb 是通过对序列 aa 进行修改得到的。每次操作可以选择任意一个元素并将其修改为任意整数。因此,对于一个整数 xx 来说,如果 xx 在序列 aa 中的出现次数超过了 kk 次,那么在序列 bb 中,xx 就有可能成为众数。
算法思路如下:
1. 用一个数组 count 记录序列 aa 中每个整数出现的次数。
2. 遍历数组 count,如果某个整数的出现次数超过了 kk,将其加入到结果集合中。
3. 如果结果集合为空,则输出 0;否则,输出结果集合的大小。
对于可能出现正无穷个整数成为众数的情况,我们可以判断是否有 aa 中某个整数的出现次数超过了 nn/kn/k 次。如果有,则输出 "pigstd";否则,按照上述方法计算可能成为众数的数量。
以下是示例的C++代码实现:
```cpp
#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;
int main() {
int n, k;
cin >> n >> k;
vector<int> a(n);
unordered_map<int, int> count;
for (int i = 0; i < n; i++) {
cin >> a[i];
count[a[i]]++;
}
bool hasInfinite = false;
int result = 0;
for (auto it : count) {
if (it.second > n / k) {
hasInfinite = true;
break;
}
if (it.second > k) {
result++;
}
}
if (hasInfinite) {
cout << "pigstd" << endl;
} else {
cout << result << endl;
}
return 0;
}
```
你可以将以上代码复制到你的C++编译器中运行,输入测试数据,就可以得到相应的输出。希望能对你有所帮助!
阅读全文