奇安信两道题代码

方法可能不太好,好歹用例都过了
import java.util.*;
public class Qianxin {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String ppidstr = sc.nextLine();
        String pidstr = sc.nextLine();
        int target = sc.nextInt();
        String[] ppidarr = ppidstr.split(" ");
        String[] pidarr = pidstr.split(" ");
        int[] ppid = new int[ppidarr.length];
        int[] pid = new int[ppid.length];
        HashMap<Integer, List<Integer>> map = new HashMap<>();
        for (int i = 0; i < pidarr.length; i++) {
            ppid[i] = Integer.valueOf(ppidarr[i]);
            pid[i] = Integer.valueOf(pidarr[i]);
            if(!map.containsKey(pid[i])) {
                List<Integer> list = new ArrayList<>();
                list.add(ppid[i]);
                map.put(pid[i], list);
            }else{
                List<Integer> list = map.get(pid[i]);
                list.add(ppid[i]);
                map.put(pid[i],list);
            }
        }
//        System.out.println(map);
        long count = 0;
        Queue<Integer> q = new LinkedList<>();
        for (int i = 0; i < ppid.length; i++) {
            if(ppid[i] == target){
                count++;
            }
        }
        if(map.containsKey(target)){
            q.offer(target);
        }
//        System.out.println(count);
        while(!q.isEmpty()){
            int size = q.size();
            for (int i = 0; i < size; i++) {
                int num = q.poll();
                if(map.containsKey(num)){
                    List<Integer> list = map.get(num);
                    for (int j = 0; j < list.size(); j++) {
                        q.offer(list.get(j));
                        count++;
                    }
                }
            }
        }
        System.out.println(count);
    }
    /*
3 1 5 21 10
0 3 3 1 5
5
    * */
    public static void main2(String[] args) {
        Scanner sc = new Scanner(System.in);
        int ceng = sc.nextInt();
        long size =(long) Math.pow(2, ceng) - 1;
        int[] nums = new int[(int)size];
        for (int i = 0; i < size; i++) {
            nums[i] = sc.nextInt();
        }
        int son1 = sc.nextInt();
        int son2 = sc.nextInt();
        int i1 = -1, i2=-1;
        int c1 = 0, c2 = 0;
        ceng = 0;
        for (int i = 0; i < size; i++) {
            if(i >= Math.pow(2, ceng) - 1) ceng++;
            if(son1 == nums[i]){ i1 = i; c1 = ceng;}
            if(son2 == nums[i]) {i2 = i; c2 = ceng;}
        }
        if(i1==-1 || i2==-1){
            System.out.println(-1);
            return;
        }
//        System.out.println("i1:" + i1 + " c1:"+ c1);
//        System.out.println(findParentIndex(i1));
//        System.out.println("i2:" + i2 + " c2:"+ c2);
//        System.out.println(findParentIndex(i2));
        while(c1 > c2){
            i1 = findParentIndex(i1);
            c1--;
        }
        while(c1 < c2){
            i2 = findParentIndex(i2);
            c2--;
        }
        while(i1 != i2){
            i1 = findParentIndex(i1);
            i2 = findParentIndex(i2);
        }
        System.out.println(nums[i1]);
    }
    private static int findParentIndex(int i){
        return (i - 1) / 2;
    }
}


#奇安信##笔试题目#
全部评论
马上做旷视的
点赞 回复 分享
发布于 2019-09-09 20:26

相关推荐

04-27 08:59
常州大学 Java
牛客139242382号:《两门以上汇编语言》
点赞 评论 收藏
分享
06-02 15:53
阳光学院 Java
点赞 评论 收藏
分享
评论
点赞
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务