#include<bits/stdc++.h>
#include<iostream>
using namespace std;
const int maxn=600;
int n,L,r,t;
int len,wid;
int A[maxn][maxn];
void cindata(){
cin>>n>>L>>r>>t;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cin>>A[i][j];
}}
}
int count_calcu(int wid,int len,int count,int sum){
int sub=sum/(wid*len);
int wuyu=sum%(wid*len);
if(wuyu!=0)sub=sub+1;
if(sub<=t)count++;
return count;
}
int main(){
cindata();
int count=0;
int startx=0;
int starty=0;
int endx=r;
int endy=r;
int he[maxn][maxn];
int sum=0;
for(int q=startx;q<=endx;q++){
for(int p=starty;p<=endy;p++){
sum=sum+A[q][p];
}}
he[0][0]=sum;
count=count_calcu(r+1,r+1,count,sum);
for(int i=0;i<n;i++){
if(i>0){
if((i-startx)>r)startx+=1;
if(endx!=n-1){
endx+=1;
}
starty=0;
endy=r;
sum=he[i-1][0];
for(int p=starty;p<=endy;p++){
if(startx-1>=0)sum=sum-A[startx-1][p];
if(i+r<=n-1)sum=sum+A[endx][p];
}
he[i][0]=sum;
wid=min(n-1,i+r)-max(0,i-r)+1;
len=r+1;
count=count_calcu(wid,len,count,sum);
}
for(int j=1;j<n;j++){
if((j-starty)>r)starty+=1;
if(endy!=n-1){
endy+=1;
}
for(int p=startx;p<=endx;p++){
if(starty-1>=0)sum=sum-A[p][starty-1];
if(j+r<=n-1)sum=sum+A[p][endy];
}
he[i][j]=sum;
wid=min(n-1,i+r)-max(0,i-r)+1;
len=min(n-1,j+r)-max(0,j-r)+1;
count=count_calcu(wid,len,count,sum);
}
}
cout<<count<<endl;
return 0;
}
CSP202104-2邻域均值题解(个人纪录)
于 2024-03-25 23:13:44 首次发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)