老鼠爱美食(mouse)

合肥市第38届信息学竞赛(2021年)

题目描述 Description

在一条道路上有很多从 1 开始依次编号的老鼠最爱的美食,假设每种美食都有无限多,而老鼠们随机闪现在任一个美食旁,然后依次尝试美食,至少需要尝试到第一次出现时的下一个美食为止,求哪两种相邻的美食被老鼠们尝试的次数最多,输出最多的次数即可。保证每只老鼠出现和停止的美食编号都不同。

输入描述 Input Description

有 n+1 行,第一行表示老鼠数量 n,
接下来 n 行每行都有两个数,分别表示老鼠第一次出现的美食编号,和停止的美食编号

输出描述 Output Description

一行,一个正整数,表示最多的次数。

样例输入 Sample Input

3 1 4 2 5 3 7

样例输出 Sample Output

3

数据范围及提示 Data Size & Hint

2≤n≤10000,美食种类保证在 int 范围内,每只老鼠出现和停止的美食编号都不同。
样例解释:
共有 3 只老鼠,第一只依次尝试了 1-2-3-4 共 4 种美食;第二只依次尝试了2-3-4-5 共 4 种美食;第三只依次尝试了 3-4-5-6-7 共 5 种美食。相邻的 3-4美食被尝试了 3 次。

这题使用了差分的思想,使计算更快捷。

上代码:

#include<iostream>
#include<algorithm>
using namespace std;
struct MOUSE {
    int bh, f;
}a[20005];
bool cmp(MOUSE x, MOUSE y) {
    if (x.bh != y.bh) {
        return x.bh < y.bh;
    }
    return x.f < y.f;
}
int n, x, y;

int main() {
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> x >> y;
        a[i].bh = x;
        a[i].f = 1;
        a[i + n].bh = y + 1;
        a[i + n].f = -1;
    }
    sort(a + 1, a + 2 * n + 1, cmp);
    int tmp = 0, ans = -1;
    for (int i = 1; i <= 2 * n; i++) {
        tmp += a[i].f;
        ans = max(ans, tmp);
    }
    cout << ans;
    return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值