Matrix Subtraction(二維差分)
阿新 • • 發佈:2020-10-25
題目連結: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) { intx=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; }