4.17华为笔试

第二题:

代码:前面细节没处理好,考完了才改好

import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine() ;
        String[] arr = str.split(" ") ;
        int m = Integer.valueOf(arr[0]) ;
        int n = Integer.valueOf(arr[1]) ;
        Map<String,TreeNode> map = new HashMap<>() ;
        for(int i=0;i<n;i++){
            //获取一行记录
            String temp = sc.nextLine() ;
            String[] arrays = temp.split(" ") ;
            //记录当前节点
            TreeNode node ;
            if(map.containsKey(arrays[0])){
                node = map.get(arrays[0]) ;
                if("0".equals(arrays[2])){
                    node.questionOne += Integer.valueOf(arrays[3]) ;
                }else{
                    node.questionTwo += Integer.valueOf(arrays[3]) ;
                }
            }else{
                if("0".equals(arrays[2])){//严重问题
                    node = new TreeNode(arrays[0],Integer.valueOf(arrays[3]),0) ;
                }else{//一般问题
                    node = new TreeNode(arrays[0],0,Integer.valueOf(arrays[3])) ;
                }
                //保存当前节点
                map.put(node.val,node) ;
            }

            //在父节点当中保存当前节点为子节点
            if(!map.containsKey(arrays[1])){
                map.put(arrays[1],new TreeNode(arrays[1],0,0)) ;
            }
            TreeNode parent = map.get(arrays[1]) ;
            boolean flag = true ;
            for(int j=0;j<parent.childrens.size();j++){
                if(parent.childrens.get(j).val == node.val){
                    flag = false ;
                    break;
                }
            }
            if(flag){
                parent.childrens.add(node) ;
            }

        }
        int ans = 0 ;
        TreeNode root = map.get("*") ;
        for(int i=0;i<root.childrens.size();i++){
            TreeNode node = root.childrens.get(i) ;
            int number = dfs(node) ;
            //System.out.println(root.childrens.get(i).val + "  " + number) ;
            if(number > m){
                ans++ ;
            }
        }
        System.out.println(ans) ;

    }
    public static int dfs(TreeNode root){
        if(root == null){
            return 0 ;
        }
        int sum = 0 ;
        for(int i=0;i<root.childrens.size();i++){
            sum += dfs(root.childrens.get(i)) ;
        }
        sum += root.questionOne * 5 + 2 * root.questionTwo ;
        return sum ;
    }
}
class TreeNode{
    String val ;
    //严重问题
    int questionOne ;
    //一般问题
    int questionTwo ;
    LinkedList<TreeNode> childrens ;
    public TreeNode(){

    }
    public TreeNode(String val,int questionOne,int questionTwo){
        this.val = val ;
        this.questionOne = questionOne ;
        this.questionTwo = questionTwo ;
        childrens = new LinkedList<>() ;
    }
}

全部评论
我这道是第二题欸
1 回复
分享
发布于 04-18 10:16 广东

相关推荐

2 5 评论
分享
牛客网
牛客企业服务