解题思路:
给组测试数据,过了应该就问题不大了.

注意事项:
参考代码:
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
public class T1448 {
public static void Insert(int []tree,int n,int i) {
if(tree[i] == 0) {tree[i]=n;return;}
if(n>tree[i]) Insert(tree,n,2*i+1);
else Insert(tree,n,2*i);
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
final int N = 500;
while(in.hasNext()) {
String str = in.nextLine();
ArrayList<Integer> list = new ArrayList<Integer>();
int tree[] = new int[N];
Scanner sc = new Scanner(str);
while(sc.hasNext()) {
int t = sc.nextInt();
list.add(t);
Insert(tree,t,1);
}
Collections.sort(list);
tree[0]=tree[1];
String []ans = new String[list.size()+1];
ArrayList<Integer> queue = new ArrayList<Integer>();
queue.add(1);
while(queue.size()!=0) {
int value = queue.get(0),index = list.indexOf(tree[value])+1;
if(value==1) ans[index] = tree[value]+"";
else {
String t = ans[list.indexOf(tree[value/2])+1];
t = t.replaceAll("\\d|-",".").substring(0,t.length()-1);
if(tree[value]<tree[value/2]&&tree[value/2]<=tree[value/4] ||
tree[value]>tree[value/2]&&tree[value/2]>tree[value/4]) {
StringBuilder sb = new StringBuilder(t);
for(int k = t.length()-1;k>=0;k--)
if(sb.charAt(k)=='|') {sb.setCharAt(k, '.');break;}
t = sb.toString();
}
ans[index]=t+"|-"+tree[value];
}
int flag = 0;
if(tree[2*value]!=0) { flag=1; queue.add(2*value); }
if(tree[2*value+1]!=0) { flag=1; queue.add(2*value+1); }
if(flag==1) ans[index]+="-|";
queue.remove(0);
}
for(int i = list.size();i>=1;i--)
System.out.println(ans[i]);
}
in.close();
}
}0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复