Untitled

mail@pastecode.io avatar
unknown
plain_text
2 years ago
3.3 kB
1
Indexable
Never
import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;
import java.awt.Point;
import java.util.Arrays;
import java.util.Comparator;


public class PlayersFinder{
    
    public static int area=0;
    public static int minx=99;
    public static int maxx=0;
    public static int miny=99;
    public static int maxy=0;
    public static int hight =0;
    public static int width =0;
 
    public static void check (char[][] board,boolean[][] checked,int y, int x, int i,int j, char t){
        // x,y are like the math axis
        //checks if the point is valid
        
        if (i<0 || j<0 || i>=y || j>=x || board[i][j] != t || checked[i][j]){
            return;
        }
        
        area++;
        checked[i][j]= true ;
        
        check(board,checked,y,x,i+1,j,t); //up
        check(board,checked,y,x,i,j+1,t); //right
        check(board,checked,y,x,i-1,j,t); //down
        check(board,checked,y,x,i,j-1,t); //left
        
        if(2*(i+1)<miny) miny=2*(i+1);
        if(2*(i+1)>maxy) maxy=2*(i+1);
        if(2*(j+1)<minx) minx=2*(j+1);
        if(2*(j+1)>maxx) maxx=2*(j+1);
    }
    
    public static void main(String[] args) {
        
        Scanner s = new Scanner(System.in);
        String Dim = s.nextLine();
        String[] parts = Dim.split(",");
        hight = Integer.parseInt(parts[0].trim());
        width = Integer.parseInt(parts[1].trim());
        
        char[][] board =new char [hight][width];
        
        for (int i = 0; i < hight; i++) {
            String row = s.nextLine();
            for (int j = 0; j < width; j++) {
                board[i][j] = row.charAt(j);
            }
        }
        
        int tid = s.nextInt();
        int Area = s.nextInt();
        s.close();

        boolean[][] checked = new boolean [hight][width];
        Point[] p = new Point[90];
        int numPoints = 0;
        for (int k = 0; k < hight; k++) {
        for (int l = 0; l < width; l++) {
            if (board[k][l] < 64) {
                check(board, checked, hight, width, k, l, (char) (tid + '0'));
                if (area * 4 >= Area) {
                    p[numPoints] = new Point(((minx + maxx) / 2) - 1, ((miny + maxy) / 2) - 1);
                    numPoints++;
                }
                area = 0;
                minx = 99;
                maxx = 0;
                miny = 99;
                maxy = 0;
            }
        }
        }
        
        Point[] pp = new Point[numPoints];
        for (int m = 0; m < numPoints; m++) {
            pp[m]=p[m];
        }
        
        Arrays.sort(pp, new Comparator<Point>() {
        public int compare(Point a, Point b) {
        int xComp = Integer.compare(a.x, b.x);
        if(xComp == 0)
            return Integer.compare(a.y, b.y);
        else
            return xComp;
          }
          });
        
        System.out.print("[");
        for (int m = 0; m < numPoints; m++) {
        System.out.print("(" + pp[m].x + ", " + pp[m].y + ")");
        if (m < numPoints - 1) {
            System.out.print(", ");
        }
        }
        System.out.print("]");
    }
}