题目描述 给定一个长度为 � n 的序列 � a,我们通过以下方式构造序列 � b: 初始时 � = � b=a。 依次对 � b 进行 � k 次操作,每次操作选择任意一个元素并将其修改为任意整数。 dXqwq 定义一个序列的众数为所有出现次数最大的数。例如 [ 1 , 1 , 4 , 5 , 1 , 4 ] [1,1,4,5,1,4] 的众数为 1 1,而 [ 1 , 14 , 5 , 14 , 19 , 19 , 8 , 10 ] [1,14,5,14,19,19,8,10] 的众数为 14 , 19 14,19。 你需要求出有多少整数可能成为 � b 的众数。 输入格式 第一行输入两个整数 � , � n,k。 第二行输入 � n 个整数 � � a i 。 输出格式 输出一个整数,代表可能成为众数的数的数量。 特别地,如果答案为正无穷,输出 pigstd。用c++代码编写
时间: 2024-04-16 12:27:39 浏览: 247
```cpp
#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;
int main() {
int n, k;
cin >> n >> k;
vector<int> a(n);
for (int i = 0; i < n; i++) {
cin >> a[i];
}
unordered_map<int, int> count;
for (int num : a) {
count[num]++;
}
int maxFrequency = 0;
for (auto it : count) {
maxFrequency = max(maxFrequency, it.second);
}
int possibleCount = 0;
for (auto it : count) {
if (it.second + k >= maxFrequency) {
possibleCount++;
}
}
if (possibleCount == n) {
cout << "pigstd" << endl;
} else {
cout << possibleCount << endl;
}
return 0;
}
```
这是一个简单的解法,首先使用一个哈希表 `count` 统计序列中每个数字出现的次数。然后找出出现次数最大的数字 `maxFrequency`。接下来遍历哈希表,如果一个数字出现的次数加上 `k` 大于等于 `maxFrequency`,则该数字可能成为众数,将 `possibleCount` 加一。最后判断如果 `possibleCount` 等于 `n`,则答案为正无穷,输出 "pigstd",否则输出 `possibleCount`。
阅读全文