202104-2 邻域均值( Java)
1.暴力解法:70分
//暴力解法:四重for循环---70public static void main(String[] args) {int count=0; Scanner sc=new Scanner(System.in);
// int n=4,L=16,r=1,t=6;
// int[][] nums=new int[][] {{0,1,2,3},{4,5,6,7},{8,9,10,11},{12,13,14,15}};int n=sc.nextInt();int L=sc.nextInt();int r=sc.nextInt();int t=sc.nextInt();int[][] nums=new int[n][n];for(int i=0;i=nums.length||j>=nums[i].length)continue;//i或j处于边界时,跳过sum+=nums[i][j];count++;}}
// System.out.println(sum+" "+count+" "+sum+" "+count*t);if(sum<=count*t) return true;else return false;}
2.二维前缀和:100分
//二维前缀和public static void main(String[] args) {Scanner sc=new Scanner(System.in);int n=sc.nextInt();int L=sc.nextInt();int r=sc.nextInt();int t=sc.nextInt();
// int n=4,L=16,r=1,t=6;int[][] nums=new int[n+2][n+2];int[][] sum=new int[n+2][n+2];//二维前缀和数组int result=0;for(int i=1;i<=n;i++) {for(int j=1;j<=n;j++) {nums[i][j]=sc.nextInt();sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+nums[i][j];//二维前缀和经典公式,这里不懂的话建议上网查或b站视频}}
// for(int i=1;i<=n;i++) {
// for(int j=1;j<=n;j++) {
// System.out.print(sum[i][j]+" ");
// }
// System.out.println();
// }for(int i=1;i<=n;i++) {for(int j=1;j<=n;j++) {int iMin=Math.max(1, i-r);//i的最上界int iMax=Math.max(n, i+r);//i的最下界int jMin=Math.max(1, j-r);//j的最上届int jMax=Math.max(n, j+r);//j的最下届int count=(iMax-iMin+1)*(jMax-jMin+1);//矩形里符合的元素个数int temp=sum[iMax][jMax]-sum[iMax][jMin-1]-sum[iMin-1][jMax]+sum[iMin-1][jMin-1];if(temp<=count*t) {result++;}}}System.out.println(result);}
}
PS:做这道题的时候我也是忘了二维前缀和,就去b站找了视频来看,如果也是小伙伴不懂二维前缀和的话,这里我推荐 二维前缀和
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
