Facebook Hacker cup Qualification round Problem 1

前几天看到Facebook 主办的比赛,题目还是比较有意思的,废话少说,直接上题

题目如下:输入为 "#" 和 "." 构成的M*M的矩形,判断在图中由所有”#“构成的图形是否为实心正方形。为矩形则输出”YES“,否则输出”NO“

比如:

..##

..##

....

....       输出为 YES

但是这个

..##

..##

#...      输出为 NO 因为题目要求是所有"# "构成的图形

.... 

这个也不行

..###

..###

..#.#      输出为 NO 因为题目要求是所有"#" 构成的图形

.....

.....

如果觉得题目有意思,建议把你的chrome 最小化,自己动手试试

本人利用正则表达式进行匹配,并已经通过测试

代码如下:

import java.util.*;
import java.io.*;
import java.math.*;

public class SquareDetector {

    void solve(Scanner sc, PrintWriter pw) {
        int N = sc.nextInt();
        String[] a = new String[N];
        // 1 stands for # 
        for(int i = 0; i < N;i++) 
          a[i] = sc.next();
          int i = 0;
          boolean tag = false;
          int count = 0;
          boolean isFound = false;

        while(i < N){
            if(a[i].matches("(\\.)*#+(\\.)+#+(\\.)*")) {pw.println("NO");return;}
            else if(!tag){
                if(a[i].matches("(\\.){" + N + "}")){ i++;}
                else if(a[i].matches("(\\.)*#+(\\.)*")){
                    int j = 0;
                    while(j < N){
                        if(a[i].charAt(j++) == '#'){
                            count++;
                            System.out.println(count);
                            System.out.println(i);

                            if(i + count-1 >= N) { pw.println("NO"); return; }
                            else if(!a[i].equals(a[i+count-1])){pw.println("NO");return;}   
                            isFound = true;                            
                        }
 
                        else j++;                
                    }
                    if(isFound){
                        int index = i+count;
                        if(index < N){
                            if(!a[index].matches("(\\.){" +N +"}")){pw.println("NO");return;}
                         }
                    }   
                    i++;                  
                    pw.println("YES");
                    return;
                }
            }           
        }
        pw.println("NO");

    }

    public static void main(String[] args) throws Exception {
        Scanner sc = new Scanner(new FileReader("square_detector.txt"));
        PrintWriter pw = new PrintWriter(new FileWriter("output.txt"));
        int caseCnt = sc.nextInt();
        for (int caseNum=0; caseNum<caseCnt; caseNum++) {
            System.out.println("Processing test case " + (caseNum + 1));
            pw.print("Case #" + (caseNum+1) + ":");
            new SquareDetector().solve(sc, pw);
        }
        pw.flush();
        pw.close();
        sc.close();
    }
}

 

 

posted @ 2013-11-25 23:42  andyqee  阅读(367)  评论(0编辑  收藏  举报