#3575. 公寓 CSES

公寓 CSES

版权信息:

image

n 个申请人和 m 间免费公寓。您的任务是分配公寓,以便尽可能多的申请人获得公寓。

每个申请人都有理想的公寓面积,他们会接受任何面积足以接近所需面积的公寓。

输入:

  • 第一行输入包含三个整数 nmk,分别表示申请人数、公寓数和允许的最大面积差。
  • 第二行包含 n 个整数 a_1, a_2, ..., a_n,表示每个申请人所需的公寓面积。如果申请人的期望面积为 x,他或她将接受大小介于 x-kx+k 之间的任何公寓。
  • 第三行包含 m 个整数 b_1, b_2, ..., b_m,表示每间公寓的面积。

输出:

  • 输出一个整数:能够获得公寓的申请人数。

约束:

  • 1 ≤ n, m ≤ 2 * 10^5
  • 0 ≤ k ≤ 10^9
  • 1 ≤ a_i, b_i ≤ 10^9

示例:

输入:

4 3 5
60 45 80 60
30 60 75

输出:

2

题目解析:

  • 需求理解​:每个申请人会接受公寓的面积在自己需求面积的上下浮动 k 内的范围。我们需要尽可能多地匹配申请人与合适的公寓。
  • 解决思路​:
    • 我们可以将公寓的面积与申请人的需求排序,然后使用贪心算法进行匹配。
    • 对于每个申请人,尽可能找一个符合条件的公寓,并且一旦找到就标记该公寓已分配。
  • 具体步骤​:
    1. 排序​:将申请人的需求和公寓的面积都进行排序。
    2. 双指针法​:用两个指针分别遍历申请人和公寓的列表,尽可能匹配申请人和公寓:
      • 如果公寓面积在申请人需求的允许范围内,则匹配该申请人。
      • 如果公寓面积过小,则移动公寓指针,尝试下一个更大的公寓。
      • 如果公寓面积过大,则移动申请人指针,尝试下一个申请人。