题目背景 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。 输入输出样例 输入 #1复制 5 0 1 2 3 4 5 输出 #1复制 5 输入 #2复制 5 1 1 2 3 4 5 输出 #2复制 pigstd 输入 #3复制 5 1 1 1 2 2 3 输出 #3复制 3 说明/提示 【样例解释】 对于第一组数据,最终 1,2,3,4,51,2,3,4,5 可能为区间众数。 对于第二组数据,将第一个数换成 6,7,8,9,\cdots6,7,8,9,⋯ 后它们均会成为区间众数,因此答案为正无穷。 对于第三组数据,1,2,31,2,3 可能成为区间众数。c++代码
时间: 2023-08-19 09:58:58 浏览: 184
#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> freq;
for (int i = 0; i < n; i++) {
freq[a[i]]++;
}
int max_freq = 0;
for (auto it = freq.begin(); it != freq.end(); it++) {
max_freq = max(max_freq, it->second);
}
int possible_count = 0;
for (auto it = freq.begin(); it != freq.end(); it++) {
if (it->second + k >= max_freq) {
possible_count++;
}
}
if (possible_count == 0) {
cout << "0" << endl;
} else if (possible_count == n) {
cout << "pigstd" << endl;
} else {
cout << possible_count << endl;
}
return 0;
}
阅读全文