• 奇3场景算法(Java实现)


    <一>表面积

    将长N*M厘米的矩形区域划分成N行M列(每行每列的宽度均为1厘米),在第i行第j列的位置上叠放Ai,j个边长为1厘米的正方体(1<=Aij<=100) ,所有正方体就组成了一个立体图形,每个正方体六个面中的一部分会被其它正方体遮挡,未被遮挡的部分的总面积即为该立体图形的表面积,那么该立体图形的表面积是多少平方厘米?

    输入
    第一行包含两个整数N和M.1sN, Ms1000.
    接下来N行,每行包含M个整数,第i行的第j个整数表示Ajp

    输出
    输出表面积的大小。

    特例输入:

      2 2

      2 1

      1 1

    特例输出:

      20

    代码如下:

    package com.ymm.core.sanliuling;
    
    import java.util.Scanner;
    
    public class Mian5 {
    
    	public static void main(String[] args) {
    		Scanner in = new Scanner(System.in);
    		
    		int N = in.nextInt();
    		int M = in.nextInt();
    		
    		if(N <= 0|| M <= 0) {
    			System.out.println(0);
    		}
    		
    		int[][] a = new int[N][M];
            
            for(int i = 0;i < N;i++){
                for(int j = 0;j < M;j++){
                    a[i][j] = in.nextInt();
                }
            }
    		System.out.println(count(a));
           
    	}
    	
    	private static int count(int[][] arr) {
     	   int[] rpw = new int[] {0,1,0,-1};
     	   int[] rdw = new int[] {1,0,-1,0};
     	   
     	   int res = 0;
     	   
     	   for(int i = 0;i < arr.length;i++) {
     		   for(int j = 0; j < arr[0].length;j++) {
     			  if(arr[i][j] > 0) {
     				  res += 2;
     				  for(int n = 0;n < 4;n++) {
     					  int np = i + rpw[n];
     					  int nd = j + rdw[n];
     					  int nres = 0;
     					  if(np >= 0 && np < arr.length && 
     							  nd >= 0 && nd < arr[0].length) {
     						  nres = arr[np][nd];
     					  }
     					  res += Math.max(arr[i][j] - nres, 0);
     				  }
     			  }
     		   }
     	   }
     	   return res;
        }
    
    }
    
  • 相关阅读:
    [学习笔记]多维偏序
    SCOI2009 游戏
    置换群和Burnside引理,Polya定理
    AC自动机——多个kmp匹配
    51nod 1667 概率好题
    分块——优化的暴力
    [Cqoi2014]数三角形——组合数
    C++ 中的导致编译错误汇总
    哈夫曼树Huffman
    导出查询结果到csv文件
  • 原文地址:https://www.cnblogs.com/youdiaodaxue16/p/11361184.html
Copyright © 2020-2023  润新知