求助!这道题怎么做!
时间限制: 1000 ms 空间限制: 128 MB题目描述
有N辆赛车在无限长的单行道上行驶,且行驶方向为坐标值增大的方向。
每量赛车在赛道上的开始行驶位置不同,一些赛车的行驶速度可能相同,也可能不同。
由于赛道是单行道,十分狭窄,赛车无法互相超越。当一辆赛车A已更高的速读接近赛车B时,避免相撞,赛车A只能减速紧随其后。此时,赛车A与赛车B组成了一个车队。
最终,不会再有赛车追上其他赛车。
橡皮熊是你的好朋友,他想知道最终会有多少个车队,你能告诉他吗?
输入格式
第一行包含一个整数N。
接下来N行,每行包含一辆赛车的初始位置和行驶速度。
所有赛车的初始位置各不相同,且是按照递增顺序给出的。
输出格式
输出一个整数,表示最终存在的车队的数量。
数据范围
1≤N≤10 ** 5初始位置范围行驶速度范围
1≤N≤10 ** 5初始位置范围行驶速度范围 输入样例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 #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;
}
递归版本
#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;
}
#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]