Kevin234


私信TA

用户名:Kevin234

访问量:20491

签 名:

手可摘星辰

等  级
排  名 849
经  验 3622
参赛次数 0
文章发表 40
年  龄 0
在职情况 学生
学  校 南京信息工程大学
专  业

  自我简介:

解题思路:

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

Snipaste_2019-01-22_18-31-46.png

注意事项:

参考代码:

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分

2 人评分

  评论区

  • «
  • »