zoukankan      html  css  js  c++  java
  • 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();
        }
    }
  • 相关阅读:
    es6中promise的实现及原理
    移动端
    javascript知识点复习
    html和css基本常识总结
    kafka,查看指定group下topic的堆积数量
    解决问题:Android设备运行自动化脚本报错 ioerror RPC server not started
    linux下安装python3
    使用vsftpd搭建FTP服务
    前端性能监控平台showslow+Yslow搭建
    学习笔记-- Python网络编程
  • 原文地址:https://www.cnblogs.com/yeek/p/3442473.html
Copyright © 2011-2022 走看看