a079. 照片局部修補

中等陣列模擬

時間限制 2000 ms ・ 記憶體限制 256 MB

題目描述

修圖師有一張 R × C 的原始照片 A。每個像素是 0 到 255 的整數。修圖師會依輸入順序進行 Q 次修補,每次指定一塊以左上角 (r1, c1)、右下角 (r2, c2) 圈出的矩形,以及整數變化量 d。矩形包含四周邊界,每格都要更新一次。

修補時,矩形內每個像素的目前數值先加上 d,再限制到 0 至 255:低於 0 改為 0,高於 255 改為 255。這個限制在每一次修補後立即套用,不是把所有變化量累加後才處理。因此同一格被多次修補時,操作先後順序可能影響結果。

最後給你一張相同尺寸的目標照片 B。請比較修補完成的 A 與 B:第一個答案是數值完全相同的對應像素個數;第二個答案是所有對應像素的差值絕對值總和。不要把『差小於某個值』當作相同,只有相等才算。

規則圖解

像素的處理方式可整理成下表。每筆修補都要依序更新目前的 A,B 直到最後比對時才使用。

目前像素 v這次修補量 dv+d更新後的像素
250+20270255(上限)
5-20-150(下限)
100-208080

範例一的兩次修補與目標 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。

輸入格式

依序讀入:

  1. 第一行:R C Q,照片行數、列數、修補次數。
  2. 接下來 R 行:原始照片 A;每行依序有 C 個整數像素。
  3. 接下來 Q 行:r1 c1 r2 c2 d,依輸入順序修補;左上角和右下角都包含在修補矩形內。Q=0 時沒有這些行。
  4. 最後 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
請先登入後再提交程式碼

討論與題解

載入討論區…

更多