NC53676-「土」秘法地震
题目链接:https://ac.nowcoder.com/acm/problem/53676
思路:二维前缀和
反思:
1.二维前缀和公式:
初始化:注意应该是加还是减
a[i][j]=a[i][j]-a[i-1][j-1]+a[i][j-1]+a[i-1][j];
使用:注意是i-1,j-1,并非i,j
a[ni][nj]+a[i-1][j-1]-a[i-1][nj]-a[ni][j-1]
2.字符串意义为单个值(01)数组读取方法:
1.scanf("%1d",&a[i][j]);//注意是1不是l(L)
2.字符串读入再处理
#include<iostream>
#include<cstdio>
using namespace std;
int a[1005][1006];
int main (){
int n,m,k;
scanf("%d%d%d",&n,&m,&k);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
scanf("%1d",&a[i][j]);
a[i][j]=a[i][j]-a[i-1][j-1]+a[i][j-1]+a[i-1][j];
}
int ans=0;
int ni,nj;
for(int i=1;i+k-1<=n;i++)
for(int j=1;j+k-1<=m;j++){
ni=i+k-1;
nj=j+k-1;
if(a[ni][nj]+a[i-1][j-1]-a[i-1][nj]-a[ni][j-1]==0)continue;
ans++;
}
printf("%d",ans);
return 0;
}

浙公网安备 33010602011771号