开始的时候被数据输入给坑了,01矩阵输入的原来是字符。然后可以递推的求出每一个区间范围内的城市的前缀和,然后再求k* k大小区间里的区间和就ok了。
求区间和怎么求呢?
#include<bits/stdc++.h>
using namespace std;
int n,m,k;
const int M=1005;
int mp[M][M];
int d[M][M];
int main(){
cin>>n>>m>>k;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
char ch;
cin>>ch;
mp[i][j]=ch-'0';
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
d[i][j]=mp[i][j]+d[i-1][j]+d[i][j-1]-d[i-1][j-1];
}
}
int ans=0;
for(int i=k;i<=n;i++){
for(int j=k;j<=m;j++){
if(d[i][j]-d[i-k][j]-d[i][j-k]+d[i-k][j-k]){
ans++;
// cout<<ans<<endl;
}
}
}
cout<<ans<<endl;
}