问题 D: 2018-黑格覆盖(cover)
题目描述
在一张由 M * N 个小正方形格子组成的矩形纸张上,有 k 个格子被涂成了黑色。给你一张由 m * n 个同样小正方形组成的矩形卡片,请问该卡片最多能一次性覆盖多少个黑格子?
输入
【输入数据】 输入共 k+1 行: 第 1 行为 5 个整数 M、N、m、n、k,其含义如题目所述。 接下来 k 行,每行 2 个整数,分别表示被涂成黑色的格子的行、列坐标。
输出
【输出数据】 输出共 1 行,1 个整数,表示卡片一次性最多能覆盖的黑格子数。
样例输入
3 5 2 2 3
1 1
2 2
3 5
样例输出
2
提示
【数据范围】 对于 40%的数据:m=n; 对于 100%的数据:M、N、m、n、k 均小于等于 1000,所有黑格不重复出现
我的代码
#include<bits/stdc++.h>
using namespace std;
int n,m,f,g,k;
int a[1005][1005],b[1005][1005];
int z,d,s;
int main(){
cin>>n>>m>>f>>g>>k;
for(int i=1;i<=k;i++){
cin>>z>>d;
a[z][d]=1;
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++)
b[i][j]=b[i][j-1]+b[i-1][j]+a[i][j]-b[i-1][j-1];
}for(int i=f;i<=n;i++){
for(int j=g;j<=m;j++){
if(s<b[i][j]-b[i-f][j]-b[i][j-g]-b[i-f][j-g]) s=b[i][j]-b[i-f][j]-b[i][j-g]-b[i-f][j-g];
}
}cout<<s;
return 0;
}
诚请各位c++人士指出我的错误(系统一直说我答案错误)。