ブルーブリッジカップ:シャオミンはビルディングブロックを使用して城を建設しました(ビルディングブロック)

トピック

【問題点】
   シャオミンはビルディングブロックで城を建てました。
   便宜上、Xiao Mingは、構築時に同じサイズの正方形のボリュームを使用し、n行m列のグリッドグラフに配置しました。各ブロックは、グリッドグラフの小さな正方形を占めています。
   もちろん、シャオミンの城は平らではなく、立体的です。Xiao Mingは、他のブロックの上にブロックを配置できます。正方形のブロックが比較的高い場合は高い塔であり、正方形のブロックがない場合は平らな地面です。
   シャオミンの城は、各広場のブロック数で表すことができます。たとえば、次は城を表しています。
   9 3 3 1
   3 3 3 0
   0 0 0 0
   この城は南側と東側に空き地があり、北西に大きな家があり、北西の角に高い塔があり、北東の角にガレージがあります。
   さて、ゲゲ魔女はシャオミンの城を破壊するためにやって来て、シャオミンの城を氾濫させる呪文を唱えます。
   水の高さが1の場合、地面に近いブロックが浸水します。上記の例では、7ブロックが浸水します。
   水位が2の場合、さらに多くのブロックが浸水します。上記の例では、13ブロックが浸水します。
   Xiao Mingの城の地図を考えると、水位が1、2、3、…、Hの場合、何ブロックが浸水しますか。
【入力形式】入力
   の1行目に2つの整数n、mが含まれています。
   次のn行は、それぞれm個の整数で、シャオミンの城の各位置にあるレンガの層の数を表しています。
   Nextには、水位の上限を表す整数Hが含まれています。
【出力フォーマット】
   Hラインを出力します。各ラインは整数です。i番目の整数は、水の高さがiのときにフラッディングされるブロックの数を表します。
[入力例]
3 4
9 3 3 1
3 3 3 0
0 0 0 0
10
[出力例]
   7
   13
   19
   20
   21
   22
   23
   24
   25
   25
[評価ユースケースの規模と慣例]
   評価ユースケースの40%について、1 <= n、m <= 100、1 <= H <= 100、ビルディングブロックの数は100を超えません。
   評価ケースの70%で、1 <= n、m <= 1000、1 <= H <= 1000、ビルディングブロックレイヤーの数は1000を超えません。
   すべての評価ケースで、1 <= n、m <= 1000、1 <= H <= 100000、ビルディングブロックの数は1000000000を超えません。

コード

import java.util.Scanner;

public class Main {
    
    //蓝桥杯要求class命名为Main,且无package
    public static void main(String[] args) {
    
    
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int m = scanner.nextInt();
        int arr[][]=new int[n][m];
        for(int i=0;i<n;i++){
    
    
            for(int j=0;j<m;j++){
    
    
                arr[i][j]=scanner.nextInt();//赋值
            }
        }
        int h = scanner.nextInt();
        for(int high=1;high<=h;high++){
    
    
            int count=0;//被水淹没的积木,high的每次循环都会重新定义count
            for(int i=0;i<n;i++){
    
    
                for(int j=0;j<m;j++){
    
    
                    if(high>=arr[i][j]){
    
    
                        count+=arr[i][j];//如果水比房子高,被淹没的积木数为arr[i][j]上的所有积木
                    }
                    if(arr[i][j]>high){
    
    
                        count+=high;  //如果房子比水高,被淹没的积木数则为high
                    }
                }
            }
            System.out.println(count);
        }

    }
}


問題分析

   すべてコードで

おすすめ

転載: blog.csdn.net/qq_47168235/article/details/108917934