酷代码 AI
菜单
全部AI  /  热门  /  AI写代码神器
服务商

c++ 描述 小小李老师喜欢玩一种数字游戏 —— 给数组添加一个排列,然后找出出现次数最多的元素。 最近,他找到了一个数组 a,并决定找出在给数组 a 添加某个排列后,他可以获得的数组中相同数字的最大数量。 更正式地说,小小李老师必须选择 n 的 任意一个 全排列 p1、p2、p3 …… pn,然后根据规则给 a 数组的每一项加上全排列对应的数字,即 ai = ai + pi,这样做会改变数组 a 的元素。之后,找出 a 数组中出现次数最多的元素,它的出现次数就是得分。 你需要帮助小小李老师,让他获得最高的得分。 长度为 n 的全排列是由 1 到 n 的 n 个不同整数以任意顺序组成的数组。 例如当 n = 5 时,[2,3,1,5,4] 是一个全排列,但 [1,2,2] 不是一个全排列,[1,3,4] 也不是一个全排列。 输入描述 每个测试包含多个测试用例 第一行包含一个整数 t(1 ≤ t ≤ 100) —— 测试用例的数量 每个测试用例的第一行包含一个整数 n(1 ≤ n ≤ 10006)—— 数组 a 的长度 每个测试用例的第二行包含 n 个整数 ai(1 ≤ ai

```cpp #include <iostream> #include <vector> #include <algorithm> int findMaxCount(const std::vector<int>& a) { // 存储每个数字出现的次数 std::vector<int> count(10000001, 0); int n = a.size(); // 遍历所有可能的全排列 for (int p = 1; p <= n; ++p) { std::vector<int> newA = a; for (int i = 0; i < n; ++i) { newA[i] += p; } // 计算新数组中每个数字出现的次数 for (int num : newA) { ++count[num]; } // 找出最大的出现次数 int maxCount = *std::max_element(count.begin(), count.end()); // 重置计数 std::fill(count.begin(), count.end(), 0); // 返回最大出现次数 if (maxCount > 0) { return maxCount; } } return 0; } int main() { int t; std::cin >> t; while (t--) { int n; std::cin >> n; std::vector<int> a(n); for (int i = 0; i < n; ++i) { std::cin >> a[i]; } std::cout << findMaxCount(a) << std::endl; } return 0; } // 注意点: // 1. 注意全排列的生成方式,确保覆盖所有可能的排列。 // 2. 处理输入输出时要注意数据范围和格式。 // 3. 注意内存使用,避免不必要的内存浪费。 ``` [2025-03-01 14:46:52 | AI写代码神器 | 424点数解答]

相关提问