題目:
有一個 H×W 的電子畫布,一開始數值都是 0 代表未填色,接下來請模擬 N 次畫筆操作。
每次畫筆操作為選一個座標 (r,c) 停留 t 秒,他會將曼哈頓距離 ≤t 的區塊染上顏色 x。若有多個顏色重複填到相同區塊,顏色的數值會累加起來。
請輸出 N 次操作後的畫布狀態。
<aside> 💡
在APCS近幾次的第二題中算十分簡單、務必學會。
在第一題難度的基礎上加了二維陣列。
C++要用到動態陣列(vector)。
</aside>
h,w,n =map(int,input().split())
paper =[[0]*w for _ in range(h)]
#r c t x
#座標 距離 顏色
#所謂的曼哈頓距離就是│x1 - x2│ + │y1 - y2│
for k in range(n):
r,c,t,x =map(int,input().split())
for i in range(h):
for j in range(w):
if abs(i-r) + abs(j-c) <= t:
paper[i][j] +=x
for i in range(h):
for j in range(w):
if w-1 != j:
print(paper[i][j],end=" ")
elif w-1 ==j:
print(paper[i][j])
#include<bits/stdc++.h>
using namespace std;
int main()
{
int h,w,n;
cin>>h>>w>>n;
vector<vector<int>> paper(h, vector<int>(w, 0));
for (int i=0;i<n;i++)
{
int r,c,t,x;
cin>>r>>c>>t>>x;
for (int a=0;a<h;a++)
for (int b=0;b<w;b++)
if(abs(r-a)+abs(c-b)<=t)
paper[a][b]+=x;
}
for (int i=0;i<h;i++)
{
for (int j=0;j<w;j++)
cout<<paper[i][j]<<" ";
cout<<"\\n";
}
return 0;
}