o077. 2. 電子畫布 - 高中生程式解題系統

題目:

有一個 H×W 的電子畫布,一開始數值都是 0 代表未填色,接下來請模擬 N 次畫筆操作。

每次畫筆操作為選一個座標 (r,c) 停留 t 秒,他會將曼哈頓距離 ≤t 的區塊染上顏色 x。若有多個顏色重複填到相同區塊,顏色的數值會累加起來。

請輸出 N 次操作後的畫布狀態。

<aside> 💡

在APCS近幾次的第二題中算十分簡單、務必學會。

在第一題難度的基礎上加了二維陣列。

C++要用到動態陣列(vector)。

</aside>

python

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])

c++

#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;
}