鱼C论坛

 找回密码
 立即注册
查看: 761|回复: 4

求助!这道题怎么做!

[复制链接]
发表于 2022-2-4 20:12:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
时间限制: 1000 ms 空间限制: 128 MB

题目描述
有N辆赛车在无限长的单行道上行驶,且行驶方向为坐标值增大的方向。

每量赛车在赛道上的开始行驶位置不同,一些赛车的行驶速度可能相同,也可能不同。

由于赛道是单行道,十分狭窄,赛车无法互相超越。当一辆赛车A已更高的速读接近赛车B时,避免相撞,赛车A只能减速紧随其后。此时,赛车A与赛车B组成了一个车队。

最终,不会再有赛车追上其他赛车。

橡皮熊是你的好朋友,他想知道最终会有多少个车队,你能告诉他吗?

输入格式
第一行包含一个整数N。

接下来N行,每行包含一辆赛车的初始位置和行驶速度。

所有赛车的初始位置各不相同,且是按照递增顺序给出的。

输出格式
输出一个整数,表示最终存在的车队的数量。

数据范围
1≤N≤10 ** 5初始位置范围[0,10 ** 9]行驶速度范围[1,10 ** 9]
1≤N≤10 ** 5初始位置范围[0,10 ** 9]行驶速度范围[1,10 ** 9]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-2-4 20:15:12 | 显示全部楼层
输入样例1
5
0 1
1 2
2 3
3 2
6 1
输出样例1
2
输入样例2
5
2 1
4 3
6 7
8 8
9 11
输出样例2
5
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-4 21:22:25 | 显示全部楼层

回帖奖励 +9 鱼币

#include <stdio.h>
#include <stdint.h>

uint32_t speed[100001];

int main(void) {
    size_t n;
    scanf("%lu", &n);
    uint32_t unused;
    for(size_t i = 0; i < n; ++i)
        scanf("%u%u", &unused, &speed[i]);
    size_t count = 1;
    for(size_t i = n - 1; i != 0; --i) {
        if(speed[i] < speed[i - 1]) {
            speed[i - 1] = speed[i];
        } else ++count;
    }
    printf("%lu\n", count);
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-4 21:47:26 | 显示全部楼层
递归版本
#include <stdio.h>
#include <stdint.h>

uint32_t speed(size_t index, size_t *count) {
    uint32_t unused;
    uint32_t current_speed, next_speed;
    scanf("%u%u", &unused, ¤t_speed);
    if(index == 0) return current_speed;
    next_speed = speed(index - 1, count);
    if(current_speed > next_speed) {
        return next_speed;
    }
    ++*count;
    return current_speed;
}

int main(void) {
    size_t n;
    scanf("%lu", &n);
    size_t count = 1;
    speed(n - 1, &count);
    printf("%lu\n", count);
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-4 23:29:31 | 显示全部楼层
#include <stdio.h>

int main()
{
    unsigned n, start, speed, max, count = 1;
    scanf("%u", &n);
    unsigned arr[n];
    for(int i = 0; i < n; i++) scanf("%u%u", &start, &arr[i]);
    max = arr[n - 1];
    for(int i = n - 2; i > -1; i--){
        if(arr[i] <= max){
            count++;
            max = arr[i];
        }
    }
    printf("%d", count);
    return 0;
}
**初始位置可以无视
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-18 14:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表