Problem: [Usaco2014 Dec]Cow Jog
Time Limit: 1 Sec Memory Limit: 128 MB
Description
奶牛们又出来锻炼她们的蹄子了!这里有N头奶牛在无穷无尽的单车道上慢(1≤N≤100,000)。每一头奶牛在道路的不同位置起跑,且一些奶牛跑步的速度不同。因为道路只有一个车道,所以这些奶牛不能“超车”。当跑得快的奶牛追上另一头奶牛时,她必须慢下来以防撞上另一头奶牛,这样她也成为了这个跑步组的一员。最终,没有任何奶牛相互撞上。农夫John想知道当这发生时,一共有多少跑步组剩下。请帮助他算出这个数目。
Input
第一行输入包含整数N。
以下的N行每行包含一个奶牛的初始位置和速度。位置是非负整数,速度是正整数;这两个数字最大值是十亿。所有的奶牛初始位置不同,数据将按照初始位置递增的顺序输入。
Output
一个单独的整数表示有多少组剩下。
Sample Input
5
0 1
1 2
2 3
3 2
6 1
Sample Output
2
HINT
首先3号牛会追上4号牛,于是它的速度变为2,然后3,4号牛会追上5号牛,速度全变为1,然后2号牛会追上(3,4,5)号牛,成为一组。只有1号牛速度最慢,于是5头牛分成了2组
代码如下
#include<stdio.h>
#define N 101000
using namespace std;
long long n,m=2000000000;
long long p[N],s[N];
int main() {
scanf("%d",&n);
int i;
for(i=1; i<=n; i++)
scanf("%d %d",p+i,s+i);
int ans=0;
for(i=n; i; i--) {
int now=i;
ans++;
while(i&&(s[i-1]-s[now])*m>=(p[now]-p[i-1]))i--;
}
printf("%d
",ans);
return 0;
}