You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ACM2563题代码问题:修改二维数组元素时全列表同步变更

问题根源及解决方案

核心错误:二维数组的引用复用

你代码里创建white_board的方式导致所有行指向同一个列表对象:

for x in range(99):
    white_board.append(white_board[0]) # 所有行都是同一个列表的引用

Python中可变对象(比如列表)的赋值/append操作传递的是内存引用,不是副本。所以你修改任意一行的元素,所有行都会同步变化——因为它们本质上是同一个列表。

正确的二维数组创建方式

用列表推导式生成独立的行,每一行都是全新的列表:

white_board = [[0]*100 for _ in range(100)]

这样white_board的每一行都是独立对象,修改某一行不会影响其他行。

修正后的完整代码

# 创建100x100的独立二维数组
white_board = [[0]*100 for _ in range(100)]

n = int(input())
pos_list = []
for _ in range(n):
    a, b = map(int, input().split())
    pos_list.append((a, b))

for x, y in pos_list:
    start_y = 100 - y
    for dy in range(10):
        current_y = start_y - dy
        start_x = x - 1
        for dx in range(10):
            current_x = start_x + dx
            white_board[current_y][current_x] = 1

# 统计涂色总面积
count = sum(row.count(1) for row in white_board)
print(count)

补充说明

  • 列表推导式[[0]*100 for _ in range(100)]中,外层循环每次都会生成新的一行,彻底避免了引用复用问题。
  • 坐标转换逻辑符合题目要求:题目中的(x,y)是左下角坐标,数组行号越大越靠下,用100 - y作为起始行,循环10次覆盖10行;列号直接从x-1开始,循环10次覆盖10列,刚好对应10x10的涂色区域。

内容的提问来源于stack exchange,提问作者iwanttosleep

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 05:59:57