P3111 [USACO14DEC] cattle jogging Cow Jog_Sliver

Title Description

The cows are out exercising their hooves again! There are N cows

jogging on an infinitely-long single-lane track (1 <= N <= 100,000).

Each cow starts at a distinct position on the track, and some cows jog

at different speeds.

With only one lane in the track, cows cannot pass each other. When a

faster cow catches up to another cow, she has to slow down to avoid

running into the other cow, becoming part of the same running group.

The cows will run for T minutes (1 <= T <= 1,000,000,000). Please

help Farmer John determine how many groups will be left at this time.

Two cows should be considered part of the same group if they are at

the same position at the end of T minutes.

There are N (1 <= N <= 100,000) in cows jogging of a single long track, the start position of each cow is different. Because it is single track, all of them can not go beyond each other. When a faster speed to catch up with another cow a cow, he must drop the same speed crash. We ran away and these cattle the same speed as a group the same location.

Calculate T (1 <= T <= 1,000,000,000) time, how many cows will be divided into teams.

Input Format

INPUT: (file cowjog.in)

The first line of input contains the two integers N and T.

The following N lines each contain the initial position and speed of a

single cow. Position is a nonnegative integer and speed is a positive

integer; both numbers are at most 1 billion. All cows start at

distinct positions, and these will be given in increasing order in

the input.

Output Format

OUTPUT: (file cowjog.out)

A single integer indicating how many groups remain after T minutes.

Sample input and output

Input # 1
5 3 
0 1 
1 2 
2 3 
3 2 
6 1 

 

Output # 1
 

3 

 

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<queue>
using namespace std;
long long n,t,last[100610];
int ans=1;
struct cow{
    long long spe,pos;
}a[100610];
long long read(){
	long long a=0,b=1;
	char ch=getchar();
	while((ch<48||ch>57)&&ch!='-'){
		ch=getchar();
	}
	if(ch=='-'){
		b=-1;
		ch=getchar();
	}
	while(ch<48||ch>57){
		ch=getchar();
	}
	while(ch>47&&ch<58){
		a=a*10+ch-48;
		ch=getchar();
	}
	return a*b;
}

int main(){
	n=read(),t=read();
    for(int i=1;i<=n;i++){
    	a[i].pos=read(),a[i].spe=read();
        last[i]=a[i].pos+a[i].spe*t;
    }
    for(int i=n-1;i>=1;i--){
        if(last[i]>=last[i+1]){
            last[i]=last[i+1];
        }
        else{
	    ans++;
        }
    }
    printf("%d",ans);
}

  

Guess you like

Origin www.cnblogs.com/xiongchongwen/p/11518034.html