Untitled

 avatar
unknown
plain_text
2 years ago
7.2 kB
9
Indexable
import java.io.*;
import java.util.*;

import javax.sound.sampled.SourceDataLine;

public class App {
    static class InputReader {
        public BufferedReader reader;
        public StringTokenizer tokenizer;

        public InputReader(InputStream stream) {
            reader = new BufferedReader(new InputStreamReader(stream), 32768);
            tokenizer = null;
        }

        public String next() {
            while (tokenizer == null || !tokenizer.hasMoreTokens()) {
                try {
                    tokenizer = new StringTokenizer(reader.readLine());
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            return tokenizer.nextToken();
        }

        public int nextInt() {
            return Integer.parseInt(next());
        }

    }

    private static InputStream inS = System.in;
    private static OutputStream outS = System.out;
    private static InputReader in = new InputReader(inS);
    private static PrintWriter out = new PrintWriter(outS);


    static int M;
    static int N;
    static int ultTot = 0;
   
   
    static{
        M = in.nextInt();
        N = in.nextInt();
    }

 
    private static boolean[][] pernah = new boolean[M][N];
    private static char[][] resultArray = new char[M][N];
    private static char[][] tempArray = new char[M][N];

    public static void main(String[] args) {
        
        // char[][] array = readArray2D(M, N);
        // resultArray = copyArray(array);
        // jawBreakDrop(array, 0);
        // out.println(ultTot);

        // for(int i = 0;i<array.length;i++){
        //     for(int j = 0;j<array[i].length;j++){
        //         int Number = array[i][j];
        //         resultArray = array;
        //         int total = 0;
        //         out.println("=====================");
        //         out.println("i = " + i + " j = " + j);
        //         while (true){
        //             fillFalse();
                    
        //             tempArray = copyArray(resultArray);
         
        //             int sum = jawBreaker(i, j, Number, tempArray);
                    
        //             if(sum == 1 || sum == 0){
        //                 break;
        //             }
        //             total += sum;
        //             resultArray = tempArray;
        //             dropDown();
        //             printArray2D();
              
                        
        //         }
        //         out.close();
        //     }
        
              
        //        out.println(total);
        //        out.println("=====================");
              
        //      }
        // }
            // ultTot += T;

            
          
            
            
        
    
        // while(true){
        //     int T = 0;

        //     for(int i = 0;i<resultArray.length;i++){
        //         for(int j = 0;j<resultArray[i].length;j++){
    
        //             int Number = resultArray[i][j];
        //             fillFalse();
                    
        //             tempArray = copyArray(resultArray);
     
        //             int  sum = jawBreaker(i, j, Number, tempArray);
    
        //             if(sum > T){
        //                 T = sum;
        //                 resultArray = tempArray;
        //             }
        //         }
        //     }
        //     if(T == 0){
        //         break;
        //     }
        //     ultTot += T;

            
        //     dropDown();
            
        //     out.println("===============================");
        //     out.println("CurTot = " + ultTot);
        //     printArray2D();
        //     out.println("===============================");
        // }
       
        
       
    }


    private static char[][] readArray2D(int M,int N){
        char[][] locArray = new char[M][N];

        for(int i = 0;i<M;i++){
            for(int j = 0;j<N;j++){
                locArray[i][j] = in.next().charAt(0);
            }
        }
        return locArray;
    }

    private static void printArray2D(){
        for(int i = 0;i<M;i++){
            for(int j = 0;j<N;j++){
                out.print(resultArray[i][j] + " ");
            }
            out.println();
        }
    }

    private static int jawBreaker(int row,int col,int Number,char[][] array){
        int numOfNum = 0;
        if(row <0 || row >= M || col <0 || col >= N){
          
            return 0;
        }
        if(array[row][col] == '.'){
            return 0;
        }
        if((int)array[row][col] != Number ){
        
            return 0;
        }
        if(pernah[row][col] == true){
           
            return 0;
        }

        pernah[row][col] = true;
        array[row][col] = '.';
        resultArray[row][col] = '.';
        
        numOfNum +=1;
        numOfNum += jawBreaker(row + 1, col, Number, array);
        numOfNum += jawBreaker(row , col + 1, Number, array);
        numOfNum += jawBreaker(row - 1, col, Number, array);
        numOfNum += jawBreaker(row , col - 1, Number, array);
       
        
        return numOfNum;
    }

    private static void fillFalse(){
        for(int i = 0;i<M;i++){
            for(int j = 0;j<N;j++){
               pernah[i][j] =false;
            }
        }
    }

    private static char[][] copyArray(char[][] array){
        char[][] returned = new char[M][N];
        for(int i = 0;i<M;i++){
            for(int j = 0;j<N;j++){
               returned[i][j] = array[i][j];
            }
        }
        return returned;
    }

    private static void swap(int i1,int i2,int j,char[][] array){
        char temp = array[i1][j];
        array[i1][j] = array[i2][j];
        array[i2][j] = temp;
    }

    private static char[][] dropDown(char[][] array){
        for(int j = 0;j<N;j++){
            for(int i = M-1;i>=0;i--){
                if(i+1 < M && array[i][j] != '.' ){
                    int temp = i;
                    while( temp+1 < M && array[temp+1][j] == '.'){
                        swap(temp, temp+1, j,array);
                        temp+=1;
                        
                    }
                }
            }
        }
        return array;
    }

    private static void jawBreakDropResq(char[][] array,int totalSum){
        
        for(int i = 0;i<array.length;i++){
            for(int j = 0;i<array[i].length;j++){
                fillFalse();
                int sum= jawBreaker(i,j,array[i][j],(array));
                if(sum == 0 || sum ==1){
                    if(totalSum > ultTot){
                        ultTot = totalSum;
                    }
                }else{
                    jawBreakDropResq(dropDown(array), totalSum + sum);
                }
               
            }
        }
       
        

    }

    


    

}
Editor is loading...