滑稽张峻铭 发表于 2022-2-4 20:12:56

求助!这道题怎么做!

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

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

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

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

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

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

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

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

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

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

数据范围
1≤N≤10 ** 5初始位置范围行驶速度范围
1≤N≤10 ** 5初始位置范围行驶速度范围

滑稽张峻铭 发表于 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

人造人 发表于 2022-2-4 21:22:25

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

uint32_t speed;

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);
    size_t count = 1;
    for(size_t i = n - 1; i != 0; --i) {
      if(speed < speed) {
            speed = speed;
      } else ++count;
    }
    printf("%lu\n", count);
    return 0;
}

人造人 发表于 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, &current_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;
}

傻眼貓咪 发表于 2022-2-4 23:29:31

#include <stdio.h>

int main()
{
    unsigned n, start, speed, max, count = 1;
    scanf("%u", &n);
    unsigned arr;
    for(int i = 0; i < n; i++) scanf("%u%u", &start, &arr);
    max = arr;
    for(int i = n - 2; i > -1; i--){
      if(arr <= max){
            count++;
            max = arr;
      }
    }
    printf("%d", count);
    return 0;
}**初始位置可以无视
页: [1]
查看完整版本: 求助!这道题怎么做!