鱼C论坛

 找回密码
 立即注册
查看: 645|回复: 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 鱼币

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

  3. uint32_t speed[100001];

  4. int main(void) {
  5.     size_t n;
  6.     scanf("%lu", &n);
  7.     uint32_t unused;
  8.     for(size_t i = 0; i < n; ++i)
  9.         scanf("%u%u", &unused, &speed[i]);
  10.     size_t count = 1;
  11.     for(size_t i = n - 1; i != 0; --i) {
  12.         if(speed[i] < speed[i - 1]) {
  13.             speed[i - 1] = speed[i];
  14.         } else ++count;
  15.     }
  16.     printf("%lu\n", count);
  17.     return 0;
  18. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-4 21:47:26 | 显示全部楼层
递归版本

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

  3. uint32_t speed(size_t index, size_t *count) {
  4.     uint32_t unused;
  5.     uint32_t current_speed, next_speed;
  6.     scanf("%u%u", &unused, &current_speed);
  7.     if(index == 0) return current_speed;
  8.     next_speed = speed(index - 1, count);
  9.     if(current_speed > next_speed) {
  10.         return next_speed;
  11.     }
  12.     ++*count;
  13.     return current_speed;
  14. }

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

使用道具 举报

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

  2. int main()
  3. {
  4.     unsigned n, start, speed, max, count = 1;
  5.     scanf("%u", &n);
  6.     unsigned arr[n];
  7.     for(int i = 0; i < n; i++) scanf("%u%u", &start, &arr[i]);
  8.     max = arr[n - 1];
  9.     for(int i = n - 2; i > -1; i--){
  10.         if(arr[i] <= max){
  11.             count++;
  12.             max = arr[i];
  13.         }
  14.     }
  15.     printf("%d", count);
  16.     return 0;
  17. }
复制代码
**初始位置可以无视
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-1 10:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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