题目
代码
代码如下(示例):
#include <stdio.h>
#include <math.h>
int map[605][605],hang[605][605];
int main()
{
int n,L,r,t;
int i,j,x,y,xl,xr,yl,yr,k;
int number=0,count;
long long sum=0,black=0;
scanf("%d %d %d %d",&n,&L,&r,&t);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&map[i][j]);
hang[i][j];
}
// 降维计算,也就是先把每一行的计算出来,这样就可以少一些求和
// 例如 map[i][j]也就是计算 Aij这个点左右 r 的和
for(j=0;j<n;j++)
{
if(j-r<0)
yl=0;
else
yl=j-r;
if(j+r>n-1)
yr=n-1;
else
yr=j+r;
for(k=yl;k<=yr;k++)
hang[i][j] += map[i][k];
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(i-r<0)
xl=0;
else
xl=i-r;
if(i+r>n-1)
xr=n-1;
else
xr=i+r;
if(j-r<0)
yl=0;
else
yl=j-r;
if(j+r>n-1)
yr=n-1;
else
yr=j+r;
sum = 0;
count = (xr-xl+1)*(yr-yl+1);
for(x=xl;x<=xr;x++)
{
sum += hang[x][j];
}
if(sum <= t*count)
number++;
}
}
printf("%d",number);
return 0;
}