スライド + グリッド (JAVA ソリューション)

グライド:ユーザーログイン

問題の説明

Xiaolan はオープン フィールドで滑ろうとしています。フィールドの高さは異なります。Xiaolan は n 行 m 列の行列を使用してフィールドを表し、行列内の値はフィールドの高さを表します。

シャオランが特定の位置にいて、上下左右のいずれかの位置の高さが現在の高さより (厳密に) 低い場合、シャオランはそこにスライドでき、スライド距離は 1 です。

シャオランが特定の位置にいて、上下左右のすべての位置の高さが現在の高さ以上になると、シャオランのスケートは終了します。

Xiaolan はマトリックスで表されるフィールドから滑り出すことができません。

シャオランはどの位置からでも滑走を開始できますが、シャオランは最大でどのくらいの距離まで滑ることができるか聞いてもいいですか。

入力フォーマット

入力の最初の行には、スペースで区切られた 2 つの整数 n、m が含まれています。

次の n 行には、各行に m 個の整数が含まれており、隣接する整数の間にはスペースで区切られており、各位置の高さを順に示しています。

出力フォーマット

出力行には、答えを表す整数が含まれます。

サンプル入力

4 5
1 4 6 3 1 
11 8 7 3 1 
9 4 5 2 1 
1 3 2 2 1

サンプル出力

7

サンプル概要

スライド位置は(2,1)、(2,2)、(2,3)、(3,3)、(3,2)、(4,2)、(4,3)となります。

コード:

import java.util.Arrays;
import java.util.Scanner;

public class 滑行 {
    static int n,m,res=0;
    static int[][] a ;
    static int s[][];
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        n = sc.nextInt();
        m = sc.nextInt();
        a = new int[n+1][m+1];
        s = new int[n+1][m+1];
        for (int i = 1; i <=n; i++) {
            for (int j = 1; j <= m; j++) {
                a[i][j] = sc.nextInt();
                s[i][j] = -1;
            }
        }
        for (int i = 1; i <=n; i++) {
            for (int j = 1; j <= m; j++) {
                res = Math.max(res,dfs(i,j));
            }
        }
        System.out.println(res);
    }
    static int dx[] = {0,1,0,-1};
    static int dy[] = {1,0,-1,0};
    private static int dfs(int x, int y) {
        if (s[x][y]!=-1) return s[x][y];
        s[x][y] = 1;
        for (int i = 0; i < 4; i++) {
            int x1 = dx[i]+x;
            int y1 = dy[i]+y;
            if (x1<1||x1>n||y1<1||y1>m) continue;
            if (a[x1][y1]<=a[x][y]) continue;
            s[x][y] = Math.max(s[x][y],dfs(x1,y1)+1);
        }
        return s[x][y];
    }
}


グリッド:

問題の説明

点 (x, y) の 2 次元座標が整数、つまり x∈Z および y∈Z である場合、この点は格子点と呼ばれます。

点の 2 次元座標 (x, y) が正の数、つまり x>0 および y>0 の場合、その点は第 1 象限にあると言われます。

第1象限の格子点、つまりx⋅y≤2021の中で、二次元座標積が2021を超えない点(x,y)がいくつあるか教えてください。

ヒント: この問題を解決するには、コンピューター プログラミングを使用することをお勧めします。

回答の提出

これは穴埋め問題です。結果を計算して提出するだけです。この質問の結果は整数です。この整数は回答送信時にのみ入力してください。余分な内容を入力すると得点できなくなります。

動作限界

  • 最大実行時間: 1秒
  • 最大実行メモリ: 256M

コード:

import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        //在此输入您的代码...
        int sum=0;
        for(int i=1;i<=2021;i++){
          for(int j=1;j<=2021;j++)
          {
            if(i*j<=2021){
              sum++;
            }
          }
        }
        System.out.println(sum);
        sc.close();
    }
}

お茶やワインを飲む兄弟はたくさんいますが、逆境に陥っている人を見たことがありません。

おすすめ

転載: blog.csdn.net/zzbzxzzdf/article/details/130573567
おすすめ