NC53676「土」秘法地震

「土」秘法地震

https://ac.nowcoder.com/acm/problem/53676

题目:给你三个数n,m,k,再给出n行m列的01数字排列,问你有多少个k*k范围里包含数字1的
思路:明显的二维前缀和求范围,利用char数组存储数字再计算二维前缀和即可
代码如下:

#include <iostream>
#include <string.h>
using namespace std;
char a[1005][1005];
int sum[1005][1005]= {0};
int main()
{

    int n,m,k;
    cin>>n>>m>>k;
    memset(a,'0',sizeof(a));
    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=m; j++)
        {
            cin>>a[i][j];
            sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+a[i][j]-'0';//二维前缀和
        }
    }
    int b,c;
    long long ans=0;
    for(b=k; b<=n; b++)
    {
        for(c=k; c<=m; c++)
        {
            if(sum[b][c]-sum[b-k][c]-sum[b][c-k]+sum[b-k][c-k]>0)ans++;//若k*k范围内有1则次数加一
        }
    }
    cout<<ans;
    return 0;
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-16 12:18
点赞 评论 收藏
分享
07-01 23:23
郑州大学 Java
否极泰来来来来:牛客迟早有高三的
点赞 评论 收藏
分享
07-15 14:14
门头沟学院 Java
7.10投递7.15感谢信
投递地平线等公司7个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务