P1007:小核桃数组变换难题,Python代码揭秘最终平方和!
以下是解决该问题的Python代码: ```python MOD = 109 + 7 # 读取输入 n, k = map(int, input().split()) # 构建初始数组 arr = [] for _ in range(k): a, b = map(int, input().split()) arr.extend([b] * a) # 进行数组变换 while len(arr) > 2: new_arr = [] for i in range(0, len(arr), 2): if i + 1 < len(arr): new_arr.append(arr[i] + arr[i + 1]) else: new_arr.append(arr[i]) arr = new_arr # 计算最后的两个数字的平方和并取模 result = (arr[0]2 + arr[1]2) % MOD print(result) ``` 代码解释 1. 读取输入:首先读取数组的长度`n`和信息的条数`k`,然后根据每条信息构建初始数组`arr`。 2. 数组变换:使用一个`while`循环,只要数组的长度大于2,就继续进行变换。在每次变换中,将相邻的两个数字相加,构建新的数组`new_arr`。 3. 计算平方和并取模:当数组的长度变为2时,计算这两个数字的平方和,并对`MOD`取模。 4. 输出结果:输出最后的结果。 复杂度分析 - 时间复杂度:每次变换数组的长度至少减半,因此变换的次数为$O(log n)$。每次变换需要遍历数组,时间复杂度为$O(n)$。总的时间复杂度为$O(n log n)$。 - 空间复杂度:主要的空间开销是存储数组,因此空间复杂度为$O(n)$。 ######[AI问答 | 416点数解答 | 2026-02-07 18:24:18]
- 揭秘!任意各位不同三位数经变换最终如何锁定 495 及编程求解变换次数(字节豆包 | 167点数解答 | 2025-04-22 20:47:58)321
- Python 运行报错:urllib3 网络连接创建失败,原因及排查建议(字节豆包 | 161点数解答 | 2024-10-31 00:39:36)464
- Python 实战:学生信息列表转字典、遍历、深拷贝及数据修改全流程(GPT | 422点数解答 | 2024-10-29 15:43:54)418
- Python实战:学生成绩列表转字典,深拷贝与数据修改操作全解析(字节豆包 | 254点数解答 | 2024-10-29 16:01:39)410
- C++实现计算最少添加数字次数以匹配两个数组元素(字节豆包 | 714点数解答 | 2026-03-08 19:44:54)16
- Java调用Python接口中文乱码?设置UTF - 8编码一招解决!(讯飞星火 | 263点数解答 | 2024-06-06 17:07:59)394
- 解决Java调用Python接口中文乱码问题:设置UTF - 8编码全攻略(讯飞星火 | 160点数解答 | 2024-06-06 17:18:39)418
- Java调用Python接口中文乱码问题:字符编码统一解决方案(讯飞星火 | 344点数解答 | 2024-06-06 17:19:55)529
- 解决Java调用Python接口时中文值乱码问题:设置字符编码为UTF-8(讯飞星火 | 264点数解答 | 2024-06-06 17:27:09)393
- C++编程揭秘:三位数变换几次能得到495?(字节豆包 | 365点数解答 | 2025-09-26 22:55:13)95
- C++ 实现:小 Q 送礼物之数字取余,开发中这 3 点要小心! (字节豆包 | 321点数解答 | 2025-11-05 18:39:56)112
- C++ 助力禾木:解决两套种树方案合并种树数量难题!(DeepSeek | 315点数解答 | 2025-11-08 15:40:30)47