题目描述 Gold King终于要出发去消灭草原黄鼠了,大家伙都来恭送打鼠英雄,场面异常的壮观。连地底下的草原黄鼠都知道了。 于是草原黄鼠给Gold King设了一个机关:在一块空地上,一字排开着鼠洞,草原黄鼠随机从1-n号的鼠洞中出现,有一秒时间让Gold King来抓他们,每个鼠洞的间距刚好设置为Gold King每秒移动一个(心疼Gold King腿短),移动到洞口,如果有草原黄鼠就可以打到。Gold King现在有T秒时间,以及T秒内草原黄鼠出现的鼠洞洞号。求草原黄鼠设置的机关让Gold King最多能打到多少只草原黄鼠。
时间: 2024-02-11 21:08:39 浏览: 37
黄鼠狼数据集 VOC和yolo格式目标标注427张左右
分析题目:
这是一道典型的区间贪心问题,我们可以把每个鼠洞看做一段区间,每个区间表示草原黄鼠出现的时间段,如果这个时间段内有草原黄鼠,那么Gold King就可以抓到他。
我们可以先将所有区间按照右端点从小到大排序,然后从左往右扫描每个区间,如果这个区间和前面的区间不重叠,那么这个区间内的草原黄鼠就可以被抓到。
代码实现:
首先定义一个结构体表示区间,包括左右端点和是否有草原黄鼠。
```cpp
struct Interval {
int l, r;
bool hasMouse;
};
```
然后按照右端点从小到大排序:
```cpp
bool cmp(Interval a, Interval b) {
return a.r < b.r;
}
sort(intervals, intervals + n, cmp);
```
接着从左往右扫描每个区间,如果这个区间和前面的区间不重叠,就将这个区间内的草原黄鼠数加上去:
```cpp
int ans = 0, last = 0;
for (int i = 0; i < n; i++) {
if (intervals[i].l >= last) {
ans += intervals[i].hasMouse;
last = intervals[i].r;
}
}
```
完整代码如下:
阅读全文