Pages

Friday 6 December 2013

Facebook Hacker Cup 2014 - Qualification - Problem A - Square Detector

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Solution { 
 
 public static void main(String[] args)
  throws IOException {
        BufferedReader br=new BufferedReader
               (new InputStreamReader(System.in));
        StringBuffer sb=new StringBuffer();
        int t=Integer.parseInt(br.readLine());
        for(int i=0;i<t;i++){
            int n=Integer.parseInt(br.readLine());
            boolean[][]arr=new boolean[n][n];
            for(int j=0;j<n;j++){
                String temp=br.readLine();
                for(int z=0;z<temp.length();z++){
                    if(temp.charAt(z)=='#'){
                        arr[j][z]=true;
                    }
                }
            }
            sb.append("Case #").append(i+1)
                  .append(": ");
            if(checkForSquare(arr)){
               sb.append("YES");
            }else{
               sb.append("NO");
            }
            sb.append("\n");
        }
        System.out.print(sb);
    }
 
    static boolean checkForSquare(boolean[][]arr){
        int iStart=-1,jStart=-1;
        boolean flag=false;
        for(int i=0;i<arr.length;i++){
            for(int j=0;j<arr[i].length;j++){
                if(arr[i][j]){
                    iStart=i;
                    jStart=j;
                    flag=true;
                    break;
                }
            }
            if(flag){
                break;
            }
        }
        if(iStart==-1&&jStart==-1){
            return false;
        }
        int iEnd=-1,jEnd=-1;
        flag=false;
        for(int i=arr.length-1;i>-1;i--){
            for(int j=arr[i].length-1;j>-1;j--){
                if(arr[i][j]){
                    iEnd=i;
                    jEnd=j;
                    flag=true;
                    break;
                }
            }
            if(flag){
                break;
            }
        }
        if(iStart==iEnd&&jStart==jEnd){
            return true;
        }
        if(iStart>iEnd || jStart>jEnd){
            return false;
        }
        if(iStart-iEnd!=jStart-jEnd){
            return false;
        }
        for(int i=iStart;i<=iEnd;i++){
            for(int j=jStart;j<=jEnd;j++){
                if(!arr[i][j]){
                    return false;
                }
            }
        }
        return true;
    }
}

No comments:

Post a Comment