代码改变世界

小L玩滚球游戏

2019-08-13 19:57  木木王韦  阅读(232)  评论(0)    收藏  举报

小L玩滚球游戏

题目描述
小L正在玩滚球游戏,有n个水晶球在轨道上以不同开始位置和速度从近往远的方向滚动,如果两个水晶球在滚动过程中相遇,它们就会融合成一个水晶球,然后以速度较慢的水晶球的速度继续向前滚动, 问经过时间t后,轨道上还有多少水晶球。
输入
第一行输入两个整数n、t,n代表水晶球的数量(1 <= n <= 105, 0<t<231),t代表时间。
接下来n行,每行两个整数,按位置从近到远的顺序给出水晶球的初始位置和速度。
输出
输出一个整数表示经过时间t后水晶球的数量。
样例输入 Copy
5 3
0 1
1 2
2 3
3 2
6 1
样例输出 Copy
3

#include<iostream>
#include<algorithm>

using namespace std;
struct node{
	int id;
	long long int v;
	long long int cx;
	long long int ex;
};
node s[100005];
long long int n,t;
int main(){
	cin>>n>>t;
	for(int i=0;i<n;i++){
		cin>>s[i].cx >>s[i].v;
		s[i].id=i;
		s[i].ex=s[i].cx+s[i].v*t;
	}
	for(int i=n-2;i>=0;i--){
		if(s[i].ex>=s[i+1].ex) s[i].ex=s[i+1].ex;
	}
	int sum=1;
	long long int ex=s[0].ex;
	for(int i=1;i<n;i++){
		if(s[i].ex!=ex){
			sum++;
			ex=s[i].ex;
			cout<<i<<endl;
		}
	}
	cout<<sum<<endl;
	return 0;
}