0809小米秋招笔试题分享

#牛客AI配图神器##秋招笔面试记录#

------------------------------------

题目一:

题目大意:
有 n (1 <= n <= 50000) 名研究生和 m (1 <= m <= 100000) 套资料。每名研究生需要一个连续编号的资料区间 [Li, Ri]。你需要将所有资料分到两个阅览室,使得尽可能多的研究生获得认证。认证条件是:某研究生需要的资料区间 [Li, Ri] 能完全覆盖其中一个阅览室的所有资料。

解法思路:
关键在于简化问题。最优的分配方案之一,必然是让其中一个阅览室只存放一套资料,例如只放资料 p。在这种情况下,研究生只要其需求区间 [L, R] 包含了资料 p,就可以获得认证。因此,问题转化为:找到哪个资料编号被最多的区间所覆盖。这是一个经典的区间覆盖问题,可以使用差分数组解决。遍历所有研究生的需求区间 [L, R],在差分数组上执行 diff[L]++ 和 diff[R+1]--。最后,计算差分数组的前缀和,其过程中的最大值就是答案。

------------------------------------

题目二:
题目大意:
在一个 n x m (1 <= n, m <= 8) 的方形区域中,有一些位置被标记为“*”。你可以用 1x3 或 3x1 的石柱覆盖区域,但每个石柱的至少一端必须在“*”上,且石柱不能重叠。当无法再放置任何石柱时,形成一个最终布局。问总共可能有多少种不同的最终布局状态(只关心哪些格子被覆盖)。(标记位置不超过13个)

解法思路:
由于标记点数量和网格大小都非常有限,这道题可以通过状态搜索来解决。核心是为每个“*”标记点决策如何放置石柱(或不放置)。我们可以用深度优先搜索(DFS)来枚举所有可能的放置组合。为了高效地表示和检查网格的占用状态,可以使用位运算(bitmask),一个64位的整数即可表示整个8x8的网格。DFS的每一层对应一个标记点,尝试以该点为端点向四个方向放置石柱,如果放置不越界且不与当前已占用的格子重叠,就更新mask并递归到下一个标记点。所有搜索完成后,将最终的mask存入一个集合(Set)中,集合的大小即为不同布局状态的数量。
全部评论

相关推荐

评论
点赞
1
分享

创作者周榜

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