題目描述
修圖師有一張 R × C 的原始照片 A。每個像素是 0 到 255 的整數。修圖師會依輸入順序進行 Q 次修補,每次指定一塊以左上角 (r1, c1)、右下角 (r2, c2) 圈出的矩形,以及整數變化量 d。矩形包含四周邊界,每格都要更新一次。
修補時,矩形內每個像素的目前數值先加上 d,再限制到 0 至 255:低於 0 改為 0,高於 255 改為 255。這個限制在每一次修補後立即套用,不是把所有變化量累加後才處理。因此同一格被多次修補時,操作先後順序可能影響結果。
最後給你一張相同尺寸的目標照片 B。請比較修補完成的 A 與 B:第一個答案是數值完全相同的對應像素個數;第二個答案是所有對應像素的差值絕對值總和。不要把『差小於某個值』當作相同,只有相等才算。
規則圖解
像素的處理方式可整理成下表。每筆修補都要依序更新目前的 A,B 直到最後比對時才使用。
| 目前像素 v | 這次修補量 d | v+d | 更新後的像素 |
|---|---|---|---|
| 250 | +20 | 270 | 255(上限) |
| 5 | -20 | -15 | 0(下限) |
| 100 | -20 | 80 | 80 |
範例一的兩次修補與目標 B:
初始 A 修補 1:矩形 (0,0)~(1,1),+5
10 20 30 15 25 30
40 50 60 45 55 60
修補 2:矩形 (1,1)~(1,2),-10 目標 B
15 25 30 15 30 30
45 45 50 45 40 50
比較表中的相同座標,可以看到 (0, 1) 相差 5、(1, 1) 相差 5,其他四格完全相同,所以輸出 4 和 10。不能把兩次修補的 d 預先相加再一次裁切:例如 250 先加 20 變 255,再減 20 會變 235,而一次加總成 0 則會錯誤地得到 250。
輸入格式
依序讀入:
- 第一行:R C Q,照片行數、列數、修補次數。
- 接下來 R 行:原始照片 A;每行依序有 C 個整數像素。
- 接下來 Q 行:r1 c1 r2 c2 d,依輸入順序修補;左上角和右下角都包含在修補矩形內。Q=0 時沒有這些行。
- 最後 R 行:目標照片 B;每行也有 C 個整數像素。
行、列座標從左上角 (0, 0) 起算;d 可以是負數,也可以為 0。
限制
- 1 ≤
R, C≤ 100;0 ≤Q≤ 100;-255 ≤d≤ 255 - 原始照片與目標照片的像素介於 0 到 255
0 ≤ r1 ≤ r2 < R、0 ≤ c1 ≤ c2 < C
輸出格式
輸出一行:相同像素數 差值絕對值總和。對每格分別取修補後的 A 與 B 的差值絕對值,再把所有格子加總;完全相同的格子也計入總格數,但差值為 0。
範例1
範例輸入:
2 3 2
10 20 30
40 50 60
0 0 1 1 5
1 1 1 2 -10
15 30 30
45 40 50
範例輸出:
4 10
修補後的 A 是 15 25 30 / 45 45 50,只有兩格與目標相差 5。
範例2
範例輸入:
1 2 2
0 255
0 0 0 1 -20
0 1 0 1 40
0 254
範例輸出:
1 1
每次修補都要立即限制範圍,因此第二格先降到 235,再升到 255。
範例測資
範例輸入 1
2 3 2 10 20 30 40 50 60 0 0 1 1 5 1 1 1 2 -10 15 30 30 45 40 50
範例輸出 1
4 10
範例輸入 2
1 2 2 0 255 0 0 0 1 -20 0 1 0 1 40 0 254
範例輸出 2
1 1
討論與題解
載入討論區…