小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;
}
浙公网安备 33010602011771号