拼多多秋招笔试8.31

第一题

城市公路某些路段路面质量下降,多多需要对这些路段进行维修。多多可进行工作的时间为1~H。同时有交通管理系统会根据不同因素发出拥堵预警:天气预报显示可能有暴雨、大型活动预计车流剧增、早晚高峰时期等。多多的维修应当在路况不繁忙的时候进行,需要注意预警时段可能存在重叠,比如雨天预警[10,20]和活动预警[15,25]同时存在,则需要避开整个[10,25]时段进行维修青你帮助多多计算可以进行公路维修的时间共有多少?

输入描述

第一行为一个整数T,表示共有T个测试数据(1 <= T<= 10)每组测试数据:

第一行为一个整数H,表示多多可进行维修的工作总时长(1<= H<= 10^9)第二行为一个整数N,表示预警时段的个数(1<= N<= 100000)接下来的N行:每行输入两个整数xi, yi, 表示区域[xi, y]被预警将有拥堵发生 (1 <= xi <= yi <= H)

输出描述

每组数据输出一个结果,每个结果占一行

解题思路

类似于 最大不相交区间问题,使用贪心的思想,将所有的 【预警时段】当作一个区间,存于一个区间数组,并且以每个区间的起始点从小到大排序,声明一个变量res用来存储结果,使用st和ed维护一个区间,然后遍历所有的区间:

  • 如果当前区间的起始点 < st, 进行区间合并, ed = min(ed, 当前区间的ed)
  • 否则,代表出现了新区间,那么 res += 当前区间的st - ed,然后更新区间

第二题

在一片神奇的魔法森林中,有n个魔法节点,每个节点都有一个传送门。第i个节点的传送门会把你传送到a;号节点。

多多每次可以选择坐传送门从i节点传送到a;节点,或者选择步行到相邻的节点i-1或i+1节点。当然多多是个喜欢偷懒的人,所以它能坐传送门就尽量不步行。现在多多从1号节点出发,想知道到达每个节点需要经过的最少步行次数,

输入描述

输入两行,第一行包含一个数字n(1<=n<=100000),表示有n个节点。接下来一行n个数字,每个数字a;(1<=a;<=n),表示i节点的传送门可以传送到a节点注意ai可能等于i

输出描述

输出一行包含n个数字,第i个数字ans;,表示从1号节点到i号节点的最少步行次数

解题思路

刚开始想使用dp,但是状态转移想不出来。。。后来想到使用BFS来做,维护一个dist数组表示每一个点到1的距离,先把1加入到队列,不断从队列中弹出元素:

  • 如果它的前后元素的dist大于当前元素的dist + 1,那么把它的前后元素加入队列
  • 如果它能够跳跃到的元素的dist大于当前元素的dist,那么把它的跳跃到的元素 加入队列

直到队列为空

第三题

给定两个仅包含小写字符 a和b的字符串 A和 B,长度分别为n和 m,现在根据A和 B构造一个 n“m 的字符矩阵 C,其中 C 的值由 A,和 B, 决定,具体计算方式如下:

·如果 A; 和 B; 都为 a,则 C为a;

·否则 C 为 b。

多多对字符 a情有独钟,他想知道矩阵 C 中共有多少个仅包含a的子矩形,并且其字符总数恰好为 k?

输入描述

三行,第一行三个正整数n,m,k,分别表示字符串 A和 B的长度,以及多多想知道的子知形个数。

第二行为字符串 A

第三行为字符串 B

(1<= n,m <= 1000,000,1 <= k <= n*m)

输出描述

一个整数K

解题思路

多模拟几个,可以发现一种乘法规律,也就是先处理a字符串,获得a串中连续'a'字串的长度的数组,再处理b字符串,获得b串中连续'a'字串的长度的数组,做双层遍历:

遍历a数组,得到矩形的长度 l:

遍历b数组,得到矩形的宽度 w:

枚举子矩形的长度x:

res += ( l - x + 1) * (w - k / x + 1)

第四题

不会

全部评论
第三题需要二分+前缀和计算才能做到真nlogn吧
点赞 回复 分享
发布于 09-01 21:14 上海

相关推荐

点赞 评论 收藏
分享
评论
6
5
分享

创作者周榜

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