#3575. 公寓 CSES
公寓 CSES
版权信息:

有 n 个申请人和 m 间免费公寓。您的任务是分配公寓,以便尽可能多的申请人获得公寓。
每个申请人都有理想的公寓面积,他们会接受任何面积足以接近所需面积的公寓。
输入:
- 第一行输入包含三个整数
n、m和k,分别表示申请人数、公寓数和允许的最大面积差。 - 第二行包含
n个整数a_1, a_2, ..., a_n,表示每个申请人所需的公寓面积。如果申请人的期望面积为x,他或她将接受大小介于x-k和x+k之间的任何公寓。 - 第三行包含
m个整数b_1, b_2, ..., b_m,表示每间公寓的面积。
输出:
- 输出一个整数:能够获得公寓的申请人数。
约束:
1 ≤ n, m ≤ 2 * 10^50 ≤ k ≤ 10^91 ≤ a_i, b_i ≤ 10^9
示例:
输入:
4 3 5
60 45 80 60
30 60 75
输出:
2
题目解析:
- 需求理解:每个申请人会接受公寓的面积在自己需求面积的上下浮动
k内的范围。我们需要尽可能多地匹配申请人与合适的公寓。 - 解决思路:
- 我们可以将公寓的面积与申请人的需求排序,然后使用贪心算法进行匹配。
- 对于每个申请人,尽可能找一个符合条件的公寓,并且一旦找到就标记该公寓已分配。
- 具体步骤:
- 排序:将申请人的需求和公寓的面积都进行排序。
- 双指针法:用两个指针分别遍历申请人和公寓的列表,尽可能匹配申请人和公寓:
- 如果公寓面积在申请人需求的允许范围内,则匹配该申请人。
- 如果公寓面积过小,则移动公寓指针,尝试下一个更大的公寓。
- 如果公寓面积过大,则移动申请人指针,尝试下一个申请人。