酷代码 AI
菜单
服务商
DeepSeek字节豆包讯飞星火
更多选项

C++ 求解长数组变换后两数字平方和,大数组信息新方式处理!

以下是使用 C++ 实现的代码: ```cpp #include <iostream> #include <vector> const int MOD = 1e9 + 7; // 合并数组直到只剩下两个元素 std::vector<long long> mergeArray(const std::vector<long long>& arr) { std::vector<long long> current = arr; while (current.size() > 2) { std::vector<long long> next; for (int i = 0; i < current.size(); i += 2) { if (i + 1 < current.size()) { next.push_back((current[i] + current[i + 1]) % MOD); } else { next.push_back(current[i]); } } current = next; } return current; } int main() { int k; std::cin >> k; std::vector<long long> arr; for (int i = 0; i < k; ++i) { int a, b; std::cin >> a >> b; for (int j = 0; j < a; ++j) { arr.push_back(b); } } std::vector<long long> result = mergeArray(arr); long long ans = (result[0] * result[0] + result[1] * result[1]) % MOD; std::cout << ans << std::endl; return 0; } ``` 代码解释: 1. 常量定义:定义常量 `MOD` 为 `1e9 + 7`,用于取模运算。 2. `mergeArray` 函数:该函数接收一个整数向量 `arr`,通过循环不断合并相邻元素,直到向量中只剩下两个元素为止。每次合并时,如果有奇数个元素,最后一个元素保持不变。合并后的结果累加上之前的结果,并对 `MOD` 取模。 3. 主函数: - 读取输入的信息条数 `k`。 - 针对每条信息,读取 `a` 和 `b`,并将 `b` 添加到数组 `arr` 中 `a` 次。 - 调用 `mergeArray` 函数对数组进行合并,得到最终的两个元素。 - 计算这两个元素的平方和,并对 `MOD` 取模。 - 输出结果。 复杂度分析: - 时间复杂度:$O(n log n)$,其中 $n$ 是数组的长度。每次合并操作的时间复杂度为 $O(n)$,最多需要进行 $log n$ 次合并。 - 空间复杂度:$O(n)$,主要用于存储合并过程中的中间结果。 ######[AI问答 | 636点数解答 | 2026-01-27 20:10:18]

相关提问
本站限时免费提问中
实用工具查看更多
Linux在线手册 [开发类]
Jquery在线手册 [开发类]
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]