1. 程式人生 > 實用技巧 >Matrix Subtraction(二維差分)

Matrix Subtraction(二維差分)

題目連結:https://ac.nowcoder.com/acm/contest/7501/J

程式碼:

#include<bits/stdc++.h>
using namespace std;
int  g[1005][1005],dif[1005][1005];
int  a,b;
int  n,m;
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d%d%d",&n,&m,&a,&b);
        for(int i=1;i<=n;i++)
        
for(int j=1;j<=m;j++) { scanf("%d",&g[i][j]); dif[i][j]=g[i][j]+g[i-1][j-1]-g[i-1][j]-g[i][j-1]; } for(int i=1;i+a-1<=n;i++) for(int j=1;j+b-1<=m;j++) { if(dif[i][j]>0) { int
x=dif[i][j]; dif[i+a][j+b]-=x; dif[i][j+b]+=x; dif[i+a][j]+=x; dif[i][j]=0; } } int f=1; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { dif[i][j]+=dif[i-1
][j]+dif[i][j-1]-dif[i-1][j-1]; if(dif[i][j]!=0) { f=0; break; } } if(f)printf("^_^\n"); else printf("QAQ\n"); } return 0; }