首页 > 其他分享 >[abc 351] [D - Grid and Magnet]

[abc 351] [D - Grid and Magnet]

时间:2024-04-27 22:02:07浏览次数:73  
标签:IOException abc return int Magnet static && new Grid

搜索


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigInteger;
import java.util.*;


public class Main {
    static int h;
    static int w;

    static char[][] board;

    static boolean[][] visited;

    static int ans = 1;

    static int once = 0;

    public static void main(String[] args) throws IOException {
        h = rd.nextInt();
        w = rd.nextInt();

        board = new char[h][w];
        for (int i = 0; i < h; i++) {
            String str = rd.nextLine();
            board[i] = str.toCharArray();
        }

        visited = new boolean[h][w];

        for (int i = 0; i < h; i++) {
            for (int j = 0; j < w; j++) {
                if (board[i][j] == '.' && !visited[i][j] && canmove(i, j)) {
                    visited[i][j] = true;
                    int once = visit(i, j);
                    if (once > ans) {
                        ans = once;
                    }
                }
            }
        }
        System.out.println(ans);
    }

    static int[][] dir = new int[][]{
            {0, 1}, {0, -1}, {1, 0}, {-1, 0}
    };

    public static boolean canmove(int row, int col) {
        for (int i = 0; i < 4; i++) {
            int x = row + dir[i][0];
            int y = col + dir[i][1];

            if (x >= 0 && x < h && y >= 0 && y < w && board[x][y] == '#') {
                return false;
            }
        }
        return true;
    }

    public static int visit(int row, int col) {
        ArrayDeque<int[]> queue = new ArrayDeque<>();
        queue.add(new int[]{row, col});
        visited[row][col] = true;
        int num = 0;

        List<int[]> recover = new ArrayList<>();
        while (!queue.isEmpty()) {
            int[] node = queue.poll();
            num++;
            int x0 = node[0];
            int y0 = node[1];
            boolean canmove = true;
            for (int i = 0; i < 4; i++) {
                int x = x0 + dir[i][0];
                int y = y0 + dir[i][1];

                if (x >= 0 && x < h && y >= 0 && y < w && board[x][y] == '#') {
                    canmove = false;
                    break;
                }
            }
            if (!canmove) {
                recover.add(new int[]{x0, y0});
                continue;
            }
            for (int i = 0; i < 4; i++) {
                int x = x0 + dir[i][0];
                int y = y0 + dir[i][1];

                if (x >= 0 && x < h && y >= 0 && y < w && board[x][y] == '.' && !visited[x][y]) {
                    visited[x][y] = true;
                    queue.add(new int[]{x, y});

                }
            }
        }

        for (int[] r: recover) {
            visited[r[0]][r[1]] = false;
        }
        return num;
    }

}

class rd {
    static BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
    static StringTokenizer tokenizer = new StringTokenizer("");

    // nextLine()读取字符串
    static String nextLine() throws IOException {
        return reader.readLine();
    }

    // next()读取字符串
    static String next() throws IOException {
        while (!tokenizer.hasMoreTokens()) tokenizer = new StringTokenizer(reader.readLine());
        return tokenizer.nextToken();
    }

    // 读取一个int型数值
    static int nextInt() throws IOException {
        return Integer.parseInt(next());
    }

    // 读取一个double型数值
    static double nextDouble() throws IOException {
        return Double.parseDouble(next());
    }

    // 读取一个long型数值
    static long nextLong() throws IOException {
        return Long.parseLong(next());
    }

    // 读取一个BigInteger
    static BigInteger nextBigInteger() throws IOException {
        BigInteger d = new BigInteger(rd.nextLine());
        return d;
    }
}

标签:IOException,abc,return,int,Magnet,static,&&,new,Grid
From: https://www.cnblogs.com/fishcanfly/p/18162625

相关文章

  • ABC 288 D - Range Add Query
    题目链接:设\(a[i]\)表示下标对\(k\)取模为\(i\)的所有数的和。那每次操作就是将数组\(a\)的所有数都加\(c\)。最终为\(0\)的充分必要条件就是\(a\)的所有数都是一样的。因此,对于每组询问,统计\([l,r]\)中数字下标对\(k\)取模的所有数的和,看看是否为同一个数即可......
  • ABC347B Substring
    题目描述给你一个由小写英文字母组成的字符串S,S有多少个不同的非空子串?子串是连续的子序列。例如,xxx是yxxxy的子串,但不是xxyxx的子串。数据范围:S是长度在1和100之间(含)的字符串,由小写英文字母组成。题解我认为这道题放在普及组的话,非常适合放在第一题和第二题之间,......
  • ABC 350
    VP的。猜猜为啥没有penalty?因为T的没有测完。submissionsA,B直接暴力。C一个很简单的方法就是第\(i\)次把\(i\)放到应该在的位置。当然如果原先就在了就别管。D一个联通图中的每两个点都能成为朋友。因此直接dsu。E记忆化搜索。注意到如果投骰子投到\(1\),直接......
  • ABC350 E - Toward 0 题解
    AtCoderBeginnerContest350E-Toward0原题地址题意给定四个数NAXY,你可以对N进行以下两种操作。花费X的代价将N变成\(\lfloor\cfrac{N}{A}\rfloor\)花费Y的代价掷一颗骰子,设掷出结果是i,将N变成\(\lfloor\cfrac{N}{i}\rfloor\)你需要执行若干次......
  • WPF自定义FixedColumnGrid布局控件
    按照上一节所讲,我已经对布局系统又所了解。接下来我就实现一个布局控件FixedColumnGrid。1.基础版布局控件机制如下,FixedColumnGrid将子控件按照水平排列,每行满两列后换行。每个控件大小相同,高度固定为50。第一步,先重载测量和排列方法protectedoverrideSizeMeasureOverrid......
  • grid布局的基本使用
    1、首先需要在父容器中设置display属性display:grid//设置容器中子元素为栅格布局2、其次最重要的就是确定容器中行数和列数,通过行数和列数形成具体的网格状布局,这也是栅格布局的由来由两个属性grid-template-columns和grid-template-row来分别决定行数和列数grid-temp......
  • [ABC343G] Compress Strings
    题目链接:https://www.luogu.com.cn/problem/AT_abc343_gsolution:1.首先我们将给出的字符串中互相包含的消去,可以使用kmp求前后缀来完成。和这道题的写法一样https://www.luogu.com.cn/problem/CF1200E2.我们发现给出的字符串最多只有20个,考虑状压来求解所有可能3.我们注意到这......
  • abc340E题解
    题目描述样例input:5312345240output:04272算法1(树状数组)$O(nlogn)$本题我们可以看作对于每一个查询位置x我们都需要先把该位置上的所有球拿出来,然后再一个一个的放到对应位置上去。假设x位置上面有y个球,那么对于这y个球,如果大于n,那么就对所有的位置放y......
  • HarmonyOS NEXT 实战开发—Grid和List内拖拽交换子组件位置
    介绍本示例分别通过onItemDrop()和onDrop()回调,实现子组件在Grid和List中的子组件位置交换。效果图预览使用说明:拖拽Grid中子组件,到目标Grid子组件位置,进行两者位置互换。拖拽List中子组件,到目标List子组件位置,进行两者位置互换。实现思路在Grid组件中,通过editMode()打......
  • [ABC329C] Count xxx 题解
    [ABC329C]Countxxx题解题目分析目的:统计本质不同而不是位置不同的所有字符都相同的字串。需要理解一下什么是本质不同而不是位置不同。结合样例1去理解这句话。列举样例1中的所有所有组成字符相同的字串。aaabaa编号字串位置\(1\)a\([1,1]\)\(2\)aa\([1......