牛客小白月赛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); } } } }