Rùa 🐢 đi làm thêm tại một cánh đồng có N hàng và M cột, có số hàng được đánh số từ 1→N từ trên xuống dưới và có số cột được đánh số từ 1→M từ trái sang phải. Nhiệm vụ của Rùa là gieo hạt vào những ô trong cánh đồng này. Rùa 🐢 có một chiến thuật gieo hạt như sau: mỗi lần gieo thứ i, đầu tiên chọn hai ô (a[i],b[i]) là ô bắt đầu và ô (c[i],d[i]) là ô kết thúc và cậu chọn thêm một số x[i] là số hạt thóc sẽ gieo trong mỗi ô. Cậu sẽ rải theo đường ziczac, đầu tiên từ (a[i],b[i]) lần lượt rải từng ô và đi sang phải đến khi đụng ô cuối cùng trong hàng, cậu đi xuống một hàng và lần lượt rải sang trái cho đến khi đụng ô đầu tiên của hàng bên dưới, cậu lại xuống một hàng và rải sang phải,... cho đến khi cậu rải xong ô cuối cùng là (c[i],d[i]). Trong khi gieo hạt, Rùa quên ghi chép lại số liệu nên hiện tại không biết số hạt mỗi ô trên cánh đồng. Cho thông tin những lần gieo hạt của Rùa, hãy giúp Rùa đếm số hạt thóc mỗi ô trong cánh đồng cuối cùng có được. Input Dòng đầu tiên chứa hai số nguyên lần lượt là N và M (1≤N,M≤10^3) Dòng tiếp theo chứa một số nguyên Q, là số lần Rùa gieo thóc (1≤Q≤2∗10^5) Q dòng tiếp theo chứa năm số nguyên dương, dòng thứ i chứa lần lượt là ai,bi,ci,di,xi (1≤a[i],c[i]≤N), (1≤b[i],d[i]≤M), (1≤x[i]≤109). Với (a[i],b[i]) là ô bắt đầu và (c[i],d[i]) là ô kết thúc. Dữ liệu đầu vào đảm bảo nếu a[i]=c[i] thì b[i]≤d[i] Output In ra N dòng, dòng thứ i in ra M số nguyên. Với dòng i, số thứ j là số thóc ở ô tương ứng trên cánh đồng. Sample Test Input 1 3 4 3 1 1 2 2 1 3 3 3 4 2 2 3 3 3 3 Output 1 1 1 1 1 0 1 4 4 0 0 5 5 - Ngôn ngữ: tùy ý :) (Khuyên dùng c++ and pas or golang or python)
1 câu trả lời
bạn đọc thử code mình đi nếu có gì chưa hiểu mình giải thích thêm
#include<bits/stdc++.h>
using namespace std;
long long n,m,q,z[1005][1005][2],z1[1005][1005][2],t,ans[1005][1005];
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cin>> n>> m>> q;
for ( int i=0; i<q; i++ )
{
long long a,b,c,d,x;
cin>> a>> b>> c>> d>> x;
if ( a%2 == 1 ) z[a][b][0] += x,z[c][d][1] -= x;
else z1[a][b][0] += x, z1[c][d][1] -= x;
}
for ( int i=1; i<=n; i++)
{
if ( i%2 == 1)
for ( int e=1; e<=m; e++)
{
t += z[i][e][0];
ans[i][e]+=t;
t += z[i][e][1];
}
else
{
for ( int e=m; e>=1; e--)
{
t += z[i][e][0];
ans[i][e]+=t;
t += z[i][e][1];
}
}
}
for ( int i=1; i<=n; i++)
{
if ( i%2 == 0)
for ( int e=1; e<=m; e++)
{
t += z1[i][e][0];
ans[i][e] += t;
t += z1[i][e][1];
}
else
{
for ( int e=m; e>=1; e--)
{
t += z1[i][e][0];
ans[i][e] += t;
t += z1[i][e][1];
}
}
}
for ( int i=1; i<=n; i++)
{
for ( int e=1; e<=m; e++) cout<<ans[i][e]<<" ";
cout<<"\n";
}
}