给出一个 n*m 的矩阵,再给出一个 大小为 x*y 的子矩阵,每次操作可以使矩阵内任意大小为 x*y 的矩阵内所有的元素减一,问是否可以使矩阵内所有元素都置 0
const int N=1e3+5;
int n,m,t;
int i,j,k;
int diff[N][N]; //差分数组
int sum[N][N]; //前缀和数组
int x,y;
void add(int x,int y,int nx,int ny,int c)
{
diff[x][y]+=c;
diff[nx+1][y]-=c;
diff[x][ny+1]-=c;
diff[nx+1][ny+1]+=c;
}
int go()
{
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(m-j+1>=y && n-i+1>=x){
if(diff[i][j]<0) return puts("QAQ")*0;
add(i,j,i+x-1,j+y-1,-diff[i][j]);
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
//sum[i][j]=sum[i][j-1]+sum[i-1][j]-sum[i-1][j-1]+diff[i][j];
if(diff[i][j]) return puts("QAQ")*0;
}
}
return puts("^_^")*0;
}
int main()
{
//IOS;
rush(){
cin>>n>>m>>x>>y;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
sum[i][j]=diff[i][j]=0;
}
}
for(i=1;i<=n;i++){
for(j=1;j<=m;j++){
int tmp; sd(tmp);
add(i,j,i,j,tmp);
}
}
go();
}
//PAUSE;
return 0;
}