13.7 同時發生:讀舊表、寫新表
有一類題目的規則寫著「所有 X 同時進行」、「以這一回合開始時的狀態計算」。這句話在提醒你:不能一邊算一邊改同一張表,否則排在後面的格子會用到前面的格子剛改過的新值。解法永遠是兩張表——讀舊表、寫新表、一回合結束再交換。
¶例題:人口遷移(APCS 2020 年 10 月中級)
題目:R \times C 的平面(1 \le R, C, m \le 50),-1 表示不是城市,其餘是城市目前人口(0 \sim 100)。兩城市只在共用一條邊時相鄰。每天:① 城市在這一天開始時有 p 人,令 q = \lfloor p / k \rfloor(4 \le k \le 50)② 向每一座相鄰城市各遷出 q 人(出界或 -1 的方向不遷)③ 所有城市都用這一天開始時的人口計算,所有遷移同時發生。模擬 m 天,輸出最後人口最少與最多的城市人口。