Untitled

mail@pastecode.io avatar
unknown
plain_text
9 days ago
4.2 kB
4
Indexable
Never
import java.util.HashMap;
 
class UserSolution {
 
    final char direction[] = { 'r', 'u', 'l', 'd' };
    final int[] dx = { 0, -1, 0, 1 };
    final int[] dy = { 1, 0, -1, 0 };
 
    boolean[][] visited;
    HashMap<String, Integer> map;
    int N;
    String res;
    int[][] board;
     
    void initHM() {
        map.put("rdlooo", 0);
 
        map.put("rrrooo", 1);
        map.put("dddooo", 1);
 
        map.put("rodloo", 2);
        map.put("drdooo", 2);
        map.put("rdrooo", 2);
        map.put("dldooo", 2);
 
        map.put("ddrooo", 3);
        map.put("rroodo", 3);
        map.put("rddooo", 3);
        map.put("dllooo", 3);
        map.put("ddlooo", 3);
        map.put("drrooo", 3);
        map.put("roddoo", 3);
        map.put("rrdooo", 3);
 
        map.put("droloo", 4);
        map.put("drodoo", 4);
        map.put("rrodoo", 4);
        map.put("dlodoo", 4);
 
        map.put("rodlodoo", 5);
        map.put("drdooloo", 5);
        map.put("drodlooo", 5);
        map.put("drrodooo", 5);
        map.put("dlodrooo", 5);
        map.put("droldooo", 5);
        map.put("dllodooo", 5);
 
        map.put("ddddoooo", 6);
        map.put("rrrroooo", 6);
 
        map.put("dddroooo", 7);
        map.put("rrrooodo", 7);
        map.put("rdddoooo", 7);
        map.put("dllloooo", 7);
        map.put("dddloooo", 7);
        map.put("drrroooo", 7);
        map.put("rodddooo", 7);
        map.put("rrrdoooo", 7);
 
        map.put("dlddoooo", 8);
        map.put("rrdroooo", 8);
        map.put("ddldoooo", 8);
        map.put("rdrroooo", 8);
        map.put("drddoooo", 8);
        map.put("rodllooo", 8);
        map.put("ddrdoooo", 8);
        map.put("rroodloo", 8);
 
        map.put("rdldoooo", 9);
        map.put("rrdloooo", 9);
        map.put("dldroooo", 9);
        map.put("rdrolooo", 9);
        map.put("drdloooo", 9);
        map.put("rrodlooo", 9);
        map.put("rdlodooo", 9);
        map.put("rdlloooo", 9);
 
        map.put("rroddooo", 10);
        map.put("dlloodoo", 10);
        map.put("ddrolooo", 10);
        map.put("drroodoo", 10);
 
        map.put("drruoooo", 11);
        map.put("roddrooo", 11);
        map.put("rrdooodo", 11);
        map.put("rddloooo", 11);
 
        map.put("rrddoooo", 12);
        map.put("ddlloooo", 12);
        map.put("ddrroooo", 12);
        map.put("rrooddoo", 12);
 
        map.put("drdroooo", 13);
        map.put("rodldooo", 13);
        map.put("rdrdoooo", 13);
        map.put("dldloooo", 13);
 
        map.put("drolodoo", 14);
 
        map.put("dloddooo", 15);
        map.put("drollooo", 15);
        map.put("ddrodooo", 15);
        map.put("rrroodoo", 15);
        map.put("ddlodooo", 15);
        map.put("drrooloo", 15);
        map.put("droddooo", 15);
 
        map.put("rddroooo", 16);
        map.put("dlldoooo", 16);
        map.put("roddlooo", 16);
        map.put("drrdoooo", 16);
    }
 
    void DFS(int x, int y, int val) {
        visited[x][y] = true;
 
        for (int i = 0; i < 4; i++) {
            int nextX = x + dx[i];
            int nextY = y + dy[i];
 
            if (nextX >= 0 && nextX < N && nextY >= 0 && nextY < N) {
                if (board[nextX][nextY] == val && !visited[nextX][nextY]) {
                    res += direction[i];
                    DFS(nextX, nextY, val);
                    res += 'o';
                }
            }
        }
    }
 
    void countBlock(int N, int[][] mBoard, int[] mTetromino, int[] mPentomino) {
        this.N = N;
        board = mBoard;
        visited = new boolean[N][N];
        map = new HashMap<String, Integer>();
        initHM();
 
        for (int i = 0; i < N; i++) {
            for (int j = 0; j < N; j++) {
                if (!visited[i][j] && mBoard[i][j] != 0) {
                    res = "";
                    DFS(i, j, mBoard[i][j]);
                    if (res.length() == 6)
                        mTetromino[map.get(res)]++;
                    else
                        mPentomino[map.get(res) - 5]++;
                }
            }
        }
    }
}
Leave a Comment