一二三四五 上山打老虎

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;
}

posted @ 2021-01-22 18:04  黒川川  阅读(62)  评论(0)    收藏  举报