牛客小白月赛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);
}
}
}
}
查看2道真题和解析