https://codefun2000.com/p/P1143
编码序列化存储
((X)2(X))1(((X)4(X))3((X)2(X)))
29
import java.util.*;
/**
因为子树必定是(...)num(...)或者空子树X,
所以可以记录左括号个数,中途让右括号消去左括号,
遇到数字时左括号数量+1就是深度。
*/
class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
int left = 0;
long res = 0;
int num = 0;
for(int i = 0; i < s.length(); i++){
char c = s.charAt(i);
if(c == '(') left ++;
else if(c == ')') left --;
else if(c == 'X') continue;
else {
num = (c - '0') + 10 * num;
if(!Character.isDigit(s.charAt(i + 1))) {
res += (long)((left + 1) * num);
num = 0;
}
}
}
System.out.println(res);
}
}
https://codefun2000.com/p/P1174
箱子之形摆放
ABCDEFG 3
AFG
BE
CD
import java.util.*;
class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String s = sc.next();
int n = sc.nextInt();
sc.close();
boolean flag = true;
StringBuilder[] arr = new StringBuilder[n];
for (int i = 0; i < n; i++) {
arr[i] = new StringBuilder();
}
int cnt = 0;
// char[][] ans = new char[n][];
int c = 0, r = 0;
while(r < n){
if(cnt == s.length()){
break;
}
if(flag){
arr[r].append(s.charAt(cnt++));
r++;
if(r == n){
flag = false;
r --;
}
}else{
arr[r].append(s.charAt(cnt++));
r --;
if(r < 0){
flag = true;
r++;
}
}
}
for(int i = 0; i < n; i++){
System.out.println(arr[i]);
}
}
}
ArrayList的
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String s = sc.next();
int n = sc.nextInt();
List<List<Character>> ans = new ArrayList<>();
for(int i = 0;i<n;++i){
ans.add(new ArrayList<List<Character>>());
}
boolean ok = false;
int len = s.length();
int idx = 0;
for(int i = 0;i<len;++i){
ans.get(idx).add(s.charAt(i));
if(ok){
idx--;
if(idx == -1){
idx++;
ok = !ok;
}
}else{
idx++;
if(idx == n){
idx--;
ok = !ok;
}
}
}
List<String> res = new ArrayList<>();
for(int i = 0;i<n;++i){
StringBuilder sb = new StringBuilder();
for(char c : ans.get(i)){
sb.append(c);
}
res.add(sb.toString());
}
System.out.println(String.join("\n", res));
}
}