奇安信 Java AC 2
难道有一次AC了,我也把我丑陋的代码,贴出来一下!!
第一题
public class Main { // 键为pid value为其父类 static Map<String, String> map; // 确认是不是目标值子类 public static boolean getMaster(String key, String val) { String ss = map.get(key); if (key.equals(val)) return true; if (ss == null) { return false; } if (ss.equals(val)) return true; return getMaster(ss, val); } public static void main(String[] args) { Scanner in = new Scanner(System.in); String firstStr = in.nextLine(); String secondStr = in.nextLine(); String arr[] = firstStr.split(" "); String ppid[] = secondStr.split(" "); int target = in.nextInt(); map = new HashMap(); for (int i = 0; i < arr.length; i++) { map.put(arr[i], ppid[i]); } String val = new String().valueOf(target); int res = 0; for (int i = 0; i < arr.length; i++) { if (getMaster(arr[i], val)) res++; } System.out.println(res); } }第二题
import java.util.Arrays; import java.util.HashMap; import java.util.Map; import java.util.Scanner; public class Main2 { //寻找两个值不望同一个方向走的节点值 static int n;//树的节点个数 public static Integer findRes(Map map ,int key1,int key2,int index,int [] arr) { if(index>n) return -1; if(key1<arr[index]&&key2<arr[index]) {//往左 return findRes(map,key1,key2,index*2+1,arr); } if(key1>arr[index]&&key2>arr[index]) { return findRes(map,key1,key2,index*2+2,arr); } return arr[index]; } public static void main(String[] args) { Scanner in=new Scanner(System.in); int depth=in.nextInt(); n=(int) Math.pow(2, depth)-1; int [] arr=new int[n]; Map<Integer,Integer> map=new HashMap(); //将数据存入map //从根节点开始 比较 看这两个值是否往同一个方向走 //如果是继续往左或往右走(当前index*2+1 index*2+2) //如果不是 记录 这个节点res 然后 如果这两个节点可以在查找到,返回res 如果不存在 返回-1 for(int i=0;i<n;i++) { arr[i]=in.nextInt(); map.put(arr[i], i); } int key1=in.nextInt(); int key2=in.nextInt(); //找到根节点 int res=findRes(map,key1,key2,0,arr); if(map.containsKey(key1)&&map.containsKey(key2)) { System.out.println(res); }else { System.out.println(-1); } } }