我们的卫星刚刚通过观测一个遥远的星球发现了外星文明。我们也已经获得了该星球的一个正方形区域的低分辨率照片。这个照片上有许多智能生命的迹象。专家们也已经确定了照片上的
卫星已将低分辨率照片的区域划分成由
卫星在一个固定的轨道上运行,而它刚好也直接经过这个网格的主对角线的上方。主对角线就是指在网络中连接左上角和右下角的那条线段。卫星能够在任意的区域上拍摄高分辨率的照片,但必须满足以下条件:
- 拍摄的区域必须是正方形。
- 这个正方形的两个对角(注:变通理解为主对角线)全部包含在网格的主对角线中。
- 网格中的每个小方格或者完全在拍摄范围内,或者完全在拍摄范围外。
卫星最多只能拍摄
一旦卫星拍摄完成,它将把每个拍摄区域的高分辨率照片传送到地面基站(无论这些区域是否包含兴趣点)。尽管一个小方格可能会被多次拍摄,但每个被拍摄到的小方格上的数据只会被传送一次。
因此,我们必须选择最多
- 每个包含至少一个兴趣点的小方格必须被至少拍摄到一次,并且
- 被拍摄到至少一次的小方格数目必须是最小的。
你的任务就是去找出被拍摄到的小方格有可能的最小值。
实现细节
你应该实现下列函数(方法):
long long take_photos(int n, int m, int k, std::vector<int> r, std::vector<int> c)
:兴趣点的数目, :网格中的行数(也是列数), :卫星能够拍摄高分辨率照片的最大次数, 和 :两个长度为 的数组,描述网格中包含兴趣点的那些小方格的坐标。对于 ,第 个兴趣点位于坐标为 的小方格,- 这个函数应该返回被至少拍摄一次的小方格的总数的最小值(这些照片必须覆盖所有兴趣点)。
样例一
take_photos(5, 7, 2, [0, 4, 4, 4, 4], [3, 4, 6, 5, 6])
在这个样例中,我们有一个
能够拍摄到所有
在最优解中,一张照片拍摄一个大小为 take_photos
应该返回
注意:尽管小方格
样例二
take_photos(2, 6, 2, [1, 4], [4, 1])
在这个样例中有
下图表示了样例二和它的最优解,在这个解中卫星只拍摄了一张包含
子任务
在全部子任务中,
子任务 | 分数 | 其他限制 | ||
---|---|---|---|---|
1 | 4 | |||
2 | 12 | |||
3 | 9 | 无 | ||
4 | 16 | 无 | ||
5 | 19 | |||
6 | 40 | 无 |
评测方式
评测程序将会按照下列格式读取输入数据:
- 第
行:整数 和 , - 第
行:整数 和 。
时间限制:
空间限制: