地毯题解
思路:
设置B,SUM两个二维数组。然后边输入毯子位置一边用函数处理(函数见代码注解)。接下来用二维数组来计算前缀和,并输出。
代码:
#include <bits/stdc++.h>
using namespace std;
const int N=1e3+5;
int b[N][N],s[N][N];
int n,m;
void add(int xa,int ya,int xb,int yb){
b[xa][ya]+=1;//地毯左上角加一
b[xa][yb+1]-=1;//右上角-1
b[xb+1][ya]-=1;//右上角减一
b[xb+1][yb+1]+=1;//左下角减一
}
int main(){
int xa,ya,xb,yb;
cin>>n>>m;
for(int i=1;i<=m;i++){
cin>>xa>>ya>>xb>>yb;
add(xa,ya,xb,yb);
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1]+b[i][j]; //计算前缀和
cout<<s[i][j]<<" ";
}
cout<<endl;
}
return 0;
}