使用 二维前缀和 算法
import java.util.Scanner; public class Main { static int[][] arr; static int n,L,r,t=0; public static void main(String[] args) { Scanner s=new Scanner(System.in); n=s.nextInt(); L=s.nextInt(); r=s.nextInt(); t=s.nextInt(); arr=new int[n+1][n+1]; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ arr[i][j]=s.nextInt()+arr[i-1][j]+arr[i][j-1]-arr[i-1][j-1]; } } int count=0; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ int sum=get_num(Math.max(1,i-r),Math.max(1,j-r),Math.min(n,i+r),Math.min(n,j+r)); int cnt=get_cnt(Math.max(1,i-r),Math.max(1,j-r),Math.min(n,i+r),Math.min(n,j+r)); if(sum<=cnt*t){ count++; } } } System.out.println(count); s.close(); } public static int get_num(int x1,int y1,int x2,int y2){ return arr[x2][y2]-arr[x1-1][y2]-arr[x2][y1-1]+arr[x1-1][y1-1]; } public static int get_cnt(int x1,int y1,int x2,int y2){ return (x2-x1+1)*(y2-y1+1); } }