前言:我没有参加这几场机考,感兴趣做了一下,有兴趣的同学参考参考
第三题(300分)最短编译时间
题目描述
A公司需要在项目中引入某开源工程,需要评估该开源工程中某模块的编译时间。当前已知该项目中每个模块的编译时间以及其依赖的模块列表,在拥有无限数量的并行任务的情况下,求某个指定模块的最短编译时间。
若模块间存在循环依赖或者依赖的模块不存在,则无法完成编译,返回-1。

输入描述:
第一行输入为目标模块名,以后每行输入定义一个模块,包含模块的名字,编译时间,依赖模块列表,用逗号隔开,若依赖模块列表不存在,则表示可以独立编译,例如:
module2,10,module1
module1,10
模块名只包含字母和数字且至少包含一个字符
模块数量不超过50000个
输出描述:
输出最短编译时间,若无法完成编译则输出-1
示例1:
module3
module1,10
module2,5
module3,10,module1,module2
输出:20
说明:module1编译需要10ms,module2编译需要5ms,module3编译依赖module1,和module2,同时自身编译也需要10ms,所以总的编译时间为10+max(10,5) = 20ms
示例2:
module2
module2,10,module1
输出:-1
说明:module1没有定义,无法完成编译,所以输出-1
参考代码

//9.8号华为第3题
#include <iostream>
#include <string>
#include <sstream>
#include <algorithm>
#include <map>
#include <set>
#include <vector>
#include <queue>using namespace std;struct node {string key;int value;vector<node>* from = nullptr;node(string k, int v) :key(k), value(v){from = new vector<node>();}bool operator < (const node& a)const{return key < a.key;}
};int main()
{map<string, node> hstable;   //图string target;cin >> target;string line;vector<vector<string>> vec;vec.clear();while (getline(cin,line)){string temp;if (line == "")continue;if (line == "e")break;      //退出,自己的测试例子,无法跳出这个循环,会循环等待输入stringstream ss(line);vector<string> s_temp;while (getline(ss, temp, ',')){s_temp.emplace_back(temp);}vec.emplace_back(s_temp);}  //完成所有的数据录入cout << vec.size() << endl;for (int i = 0; i < vec.size(); i++)   //先吧点{if (hstable.find(vec[i][0]) == hstable.end())   //如果没有就添加一个新的进去{hstable.emplace(vec[i][0], node(vec[i][0], atoi(&vec[i][1][0])));}}for (int i = 0; i < vec.size(); i++){if (vec[i].size() != 2)   //完成依赖关系的建立{for (int j = 2; j < vec[i].size(); j++){if (hstable.find(vec[i][j]) == hstable.end())   //未定义,无法完成编译{cout << -1 << endl;return 0;}hstable.find(vec[i][0])->second.from->emplace_back(hstable.find(vec[i][j])->second);}}}set<node> finish;int ans = 0;queue<node> myqueue;myqueue.push(hstable.find(target)->second);                    //目标点finish.emplace(hstable.find(target)->second);while (!myqueue.empty()){int len = myqueue.size();int temp_max = 0;for (int i = 0; i < len; i++){node temp = myqueue.front();myqueue.pop();temp_max = max(temp_max, temp.value);     //保留每一层的最大值for (auto i : *temp.from){if (finish.find(i) != finish.end())   //依赖之前的点,说明存在环{cout << -1 << endl;return 0;}finish.emplace(i);                   //完成使命的点myqueue.push(i);}}ans += temp_max;}cout << ans << endl;return 0;
}

小结:图的bfs,确定环这里,考虑了很多种例子,后面权衡之后还是用一个哈希表存遍历过的点结构,而用拓扑排序的那种做法(应该可能有其他的点的边,依赖进去),在几种特殊的例子下,是过不了的。这里我的做法也是做了一个反向,从目标点反推,舍去不要的点。
问题
1.map<sting,node> hstable;我使用hstable[“xxx”]表示一个node数据结构,ide报错,而使用hstable.find(“xxx”)->second就没有问题。有人知道这个是什么问题,请留言评论。
2.我的代码是vs下运行的,所以在输入处理那一块还是有点和考试的不一样。调用getline(cin,line)时会发现在vec的第一个位置会压入一个空的vector< string >,这个可能和我环境关系,我在运行这个循环之前,cin了一次,这个会导致问题的出现。

最近华为笔试题(9.8)第三题相关推荐

  1. 华为笔试题答案2019-9-7笔试第一题,跳数

    import copy count = 1 n = list(raw_input().split()) a = [int(i) for i in n] b = list(copy.deepcopy(a ...

  2. 2019届华为笔试题(软件卷)

    华为笔试题共3道编程题.第一题100分,第二题200分,第三题300分,一共600分. 第一题: 输入描述: 1.忽略小数点,例如"A1.2",认为包含整数1和2: 2.如果整数的 ...

  3. 【leetcode】第394题:字符串解码(华为笔试题)

    题目:给定一个经过编码的字符串,返回它解码后的字符串. 编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次.注意 k 保证为正整数. ...

  4. 华为笔试题---明明的随机数

    题目 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着 ...

  5. 程序员笔试题收集汇总(三)

    相关文章: 程序员笔试题收集汇总(一) http://blog.csdn.net/youyou1543724847/article/details/52383530 程序员笔试题收集汇总(二) htt ...

  6. 华为笔试题 -- 多个数组按顺序合并(Java代码实现)

    华为笔试题 – 多个数组按顺序合并(Java代码实现) 题目描述: 现在有多组整数数组,需要将他们合并成一个新的数组.合并规则,从每个数组里按顺序取出固定长度的内容合并到新的数组中,取完的内容会删除掉 ...

  7. Linux运维工程师笔试题系列6(30题)

    Linux运维工程师笔试题系列6(30题) 如果您对问题有疑问,或者认为答案不准确的,欢迎留言交流. 问题如下: 1. cat -n file1file2 命令的意思是? A 只会把文件file1的内 ...

  8. 2014-百度 阿里 华为笔试题

    8月15日,百度2道面试题: 1.来自<编程之美>的概率题:一个桶里面有白球.黑球各100个,现在按下述规则取球:的     i .每次从通里面拿出来两个球:     ii.如果取出的是两 ...

  9. 十月下旬腾讯 网易游戏 百度迅雷校园招聘笔试题集锦 第271 330题

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 十月下旬 ...

  10. Java校招笔试题-Java基础部分(三)

    导语   Java 面试题集2021版 Java基础部分三 26.说说has a 与is a的区别 27.一个房间里有一把椅子,椅子有四条腿,房子和椅子是什么关系,椅子和椅子腿是什么关系? 28.什么 ...

最新文章

  1. 端口01 - 零基础入门学习汇编语言67
  2. 对比3家平台,我总结了疫情数据可视化的8点经验
  3. jboss加载组件_直接从JBoss AS 7组件使用JGroups
  4. scala读取mysql文件_9. Scala操作外部数据 文件读取,xml,Excel,MySQL
  5. hihoCoder 1378 网络流二·最大流最小割定理 (网络流学习#2 记录)
  6. 前台数据数组转化为json数据
  7. 矩阵运算_迹的相关性质
  8. java获取文本文件的编码格式
  9. FFmpeg合并多个ts视频文件
  10. android中图标怎么改,android的软件图标怎么改
  11. Android:异步处理之Handler+Thread的应用(一)
  12. K8S的apiVersion版本详解
  13. gif录制软件:ScreenToGif
  14. 【Proteus仿真】【51单片机】智能温控风扇设计
  15. 【Excel】工作中会用到的excel操作和技巧
  16. mysql 查询随机10条数据 (转载)
  17. 美国计算机音乐专业,美国大学音乐疗法专业Music therapy解析
  18. JS三元表达式动态改变显示内容
  19. 51单片机 Proteus仿真 电烙铁温度保护系统 DS18B20 温度报警系统
  20. 基于ZYNQ-7000的AI加速器设计之GP接口的实现

热门文章

  1. 致 Python 初学者
  2. Matlab 中文版下载,安装图文教程
  3. 利用python炒股talib_TaLib在股票技术分析中的应用
  4. 小米路由器 网站服务器地址,小米路由器设置网址
  5. IEC 61850标准中ACSI映射实现研究
  6. topjui中datagrid增删改查
  7. 联想昭阳E42-80高通QCA9377安裝Ubuntu14.04无法使用Wi-Fi解決方法
  8. 大数据概述(尚硅谷)
  9. Monkey 命令 基本参数介绍
  10. YEDDA使用方法 命名实体识别