最近华为笔试题(9.8)第三题
前言:我没有参加这几场机考,感兴趣做了一下,有兴趣的同学参考参考
第三题(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)第三题相关推荐
- 华为笔试题答案2019-9-7笔试第一题,跳数
import copy count = 1 n = list(raw_input().split()) a = [int(i) for i in n] b = list(copy.deepcopy(a ...
- 2019届华为笔试题(软件卷)
华为笔试题共3道编程题.第一题100分,第二题200分,第三题300分,一共600分. 第一题: 输入描述: 1.忽略小数点,例如"A1.2",认为包含整数1和2: 2.如果整数的 ...
- 【leetcode】第394题:字符串解码(华为笔试题)
题目:给定一个经过编码的字符串,返回它解码后的字符串. 编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次.注意 k 保证为正整数. ...
- 华为笔试题---明明的随机数
题目 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着 ...
- 程序员笔试题收集汇总(三)
相关文章: 程序员笔试题收集汇总(一) http://blog.csdn.net/youyou1543724847/article/details/52383530 程序员笔试题收集汇总(二) htt ...
- 华为笔试题 -- 多个数组按顺序合并(Java代码实现)
华为笔试题 – 多个数组按顺序合并(Java代码实现) 题目描述: 现在有多组整数数组,需要将他们合并成一个新的数组.合并规则,从每个数组里按顺序取出固定长度的内容合并到新的数组中,取完的内容会删除掉 ...
- Linux运维工程师笔试题系列6(30题)
Linux运维工程师笔试题系列6(30题) 如果您对问题有疑问,或者认为答案不准确的,欢迎留言交流. 问题如下: 1. cat -n file1file2 命令的意思是? A 只会把文件file1的内 ...
- 2014-百度 阿里 华为笔试题
8月15日,百度2道面试题: 1.来自<编程之美>的概率题:一个桶里面有白球.黑球各100个,现在按下述规则取球:的 i .每次从通里面拿出来两个球: ii.如果取出的是两 ...
- 十月下旬腾讯 网易游戏 百度迅雷校园招聘笔试题集锦 第271 330题
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 十月下旬 ...
- Java校招笔试题-Java基础部分(三)
导语 Java 面试题集2021版 Java基础部分三 26.说说has a 与is a的区别 27.一个房间里有一把椅子,椅子有四条腿,房子和椅子是什么关系,椅子和椅子腿是什么关系? 28.什么 ...
最新文章
- 端口01 - 零基础入门学习汇编语言67
- 对比3家平台,我总结了疫情数据可视化的8点经验
- jboss加载组件_直接从JBoss AS 7组件使用JGroups
- scala读取mysql文件_9. Scala操作外部数据 文件读取,xml,Excel,MySQL
- hihoCoder 1378 网络流二·最大流最小割定理 (网络流学习#2 记录)
- 前台数据数组转化为json数据
- 矩阵运算_迹的相关性质
- java获取文本文件的编码格式
- FFmpeg合并多个ts视频文件
- android中图标怎么改,android的软件图标怎么改
- Android:异步处理之Handler+Thread的应用(一)
- K8S的apiVersion版本详解
- gif录制软件:ScreenToGif
- 【Proteus仿真】【51单片机】智能温控风扇设计
- 【Excel】工作中会用到的excel操作和技巧
- mysql 查询随机10条数据 (转载)
- 美国计算机音乐专业,美国大学音乐疗法专业Music therapy解析
- JS三元表达式动态改变显示内容
- 51单片机 Proteus仿真 电烙铁温度保护系统 DS18B20 温度报警系统
- 基于ZYNQ-7000的AI加速器设计之GP接口的实现