2017 年腾讯秋招软件开发笔试编程题回忆版(所有题目大致描述如下,并非完整的题目回忆,但意思大致一样)1、又一个魔法城市,城市里面有 n 个魔法城堡,序号为 0,1,2。。。n-1;魔法城堡之间都有路径相连;魔法城堡两两之间的到达的距离不同,因此所需时间也可能不会相同。如魔法城堡 0 到魔法城堡 2 需要耗时 4 小时;现,小明想从魔法城堡 0 到魔法城堡 1,他想知道需要花费多少时间;为了快速到达,有一魔法扫把,魔法扫把使用次数有限,使用一次,可以将某一段间的时间减半;求小明从魔法城堡 0 到魔法城堡 1 花费的最小时间,精确到一位小数。输入:总共 n+1 行;第一行,魔法城堡数 n;魔法扫把能够使用的次数 k;第二行到第 n 行为魔法城堡之间到达需要的时间;输出:从魔法城堡 0 到魔法城堡花费的最短时间:t,精确到小数点后一位。示例:输入:3 2094904440(注:腾讯这里输入的 094,904,440,是以字符串的形式输入的)输出:4.0个人大致思路:利用 Dijkstra 最短路径求法;记录到魔法城堡 1 的最短路径上每一个前驱节点和对应的距离;然后对每段的距离进行降序排序;之后把魔法扫把使用在所耗时最多的段中。如 0 到 1 的最短路径为 0 到 2,消耗为 4;2 到 1 消耗为 3;魔法扫把能使用 1 次;那么把这一次机会使用在 0 到 2 这一段路径上;那么最后最短时间即为:2+3=5.0;代码实现为:#include
#include #include #include