牛客小白月赛31 部分题解

B. A + B
Solution
我主要是用过匹配内容,然后判断对应的式子,最后再构建成字符zhejib

import java.util.ArrayList;
import java.util.Scanner;

public class Main {

    static String[] r1= {
            "###", "..#", "###",
            "###", "#.#", "###",
            "###", "###", "###",
            "###", "..."
            };
    static String[] r2= {
            "#.#", "..#", "..#",
            "..#", "#.#", "#..",
            "#..", "#.#", "#.#",
            "#.#", ".#."
            };
    static String[] r3= {
            "#.#", "..#", "###",
            "###", "###", "###",
            "###", "#.#", "###",
            "###", "###"
            };
    static String[] r4= {
            "#.#", "..#", "#..",
            "..#", "..#", "..#",
            "#.#", "..#", "#.#",
            "..#", ".#."
            };
    static String[] r5= {
            "###", "..#", "###",
            "###", "..#", "###",
            "###", "..#", "###",
            "###", "..."
            };

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int t = in.nextInt();
        for(int i=0; i<t; i++) {
            String rs1 = in.next();
            String rs2 = in.next();
            String rs3 = in.next();
            String rs4 = in.next();
            String rs5 = in.next();
            in.nextLine();
            f(rs1,rs2,rs3,rs4,rs5);
            System.out.println();
        }

        in.close();
    }

    public static void f(String rs1, String rs2, String rs3, String rs4, String rs5) {
        int leng = rs1.length();
        int nums = (leng+1)/4;
        int []result = new int[nums];
        int index = 0;
        for(int i1=0; i1<leng; i1+=4) {
//            System.out.println(r1[i1]);
            String rs1i = rs1.substring(i1,i1+3);
            String rs2i = rs2.substring(i1,i1+3);
            String rs3i = rs3.substring(i1,i1+3);
            String rs4i = rs4.substring(i1,i1+3);
            String rs5i = rs5.substring(i1,i1+3);
            for(int j=0; j<=10; j++) {
                if(rs1i.equals(r1[j])
                        &&rs2i.equals(r2[j])
                        &&rs3i.equals(r3[j])
                        &&rs4i.equals(r4[j])
                        &&rs5i.equals(r5[j])) {
                    result[index] = j;
                    index++;
                }
            }
        }
        String num="";
        for(int m: result) {
            if(m!=10) {
                num+=m;
            }else {
                num+="+";
            }
        }
        String[] sums = num.split("\\+");
        int sum = 0;
        for(String x: sums) {
            sum += Integer.parseInt(x);
        }
        char[] charArray = (""+sum).toCharArray();
        String content = "";
        for(char x: charArray) {
            String n = ""+x;
            content+=r1[Integer.parseInt(n)]+".";
        }
        System.out.println(content.substring(0, content.length()-1));
        content="";
        for(char x: charArray) {
            String n = ""+x;
            content+=r2[Integer.parseInt(n)]+".";
        }
        System.out.println(content.substring(0, content.length()-1));
        content="";
        for(char x: charArray) {
            String n = ""+x;
            content+=r3[Integer.parseInt(n)]+".";
        }
        System.out.println(content.substring(0, content.length()-1));
        content="";
        for(char x: charArray) {
            String n = ""+x;
            content+=r4[Integer.parseInt(n)]+".";
        }
        System.out.println(content.substring(0, content.length()-1));
        content="";
        for(char x: charArray) {
            String n = ""+x;
            content+=r5[Integer.parseInt(n)]+".";
        }
        System.out.println(content.substring(0, content.length()-1));
        content="";
    }

}

H. 对称之美
Solution
这里我主要使用了HashSet统计每行的不同字母,removeAll返回true代表已经删除了元素,那也就证明了两个集合存在交集,也就是可以做对称。然后看是否可以构成回文数。

import java.util.HashSet;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int t =in.nextInt();

        for(int i=0; i<t; i++) {
            int row = in.nextInt();
            HashSet[] nums=new HashSet[row];
            for(int j=0; j<row; j++) {
                HashSet s = new HashSet();
                String line = in.next();
                char[] charArray = line.toCharArray();
                for(char x: charArray) {
                    int r = (int)x-'a';
                    s.add(r);
                }
                nums[j]=s;
            }
            int start = 0;
            int end = row-1;
            boolean b = true;
            if(row%2==0) {
                while(start+1<=end) {
                    if(nums[start].removeAll(nums[end])) {
                        start++;
                        end--;
                    }else {
                        b=false;
                        System.out.println("No");
                        break;
                    }
                }
                if(b) {
                    System.out.println("Yes");
                }
            }else {
                while(start<=end) {
                    if(nums[start].removeAll(nums[end])) {
                        start++;
                        end--;
                    }else {
                        b=false;
                        System.out.println("No");
                        break;
                    }
                }
                if(b) {
                    System.out.println("Yes");
                }
            }
        }
        in.close();
    }

}

G 简单题的逆袭
Solution
这里我直接使用BigInteger加速运算,考虑特殊情况后可以直接解决问题。

import java.math.BigInteger;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int t =in.nextInt();
        for(int i=0; i<t; i++) {
            BigInteger x = in.nextBigInteger();
            BigInteger y = in.nextBigInteger();
            BigInteger temp = new BigInteger("1");
            int count = 0;
            if(x.equals(new BigInteger("1"))||x.equals(new BigInteger("0"))) {
                System.out.println("-1");
            }else {
                while(temp.compareTo(y) <= 0){
                    temp = temp.multiply(x);
                    count++;
                }
                System.out.println(count-1);
            }
        }
    }

}
全部评论

相关推荐

03-10 20:35
已编辑
武汉大学 C++
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务