F. chino with ball
题目大意
有 N N N 个小球在光滑水平的地上,初始速度有三种情况, − 1 , 0 , 1 -1, 0, 1 −1,0,1
求 k k k 秒后各个小球的位置
题解
可以把小球碰撞后当作是穿过去了,这样编号就乱了,用起始的位置来维护一下。
代码
#include<bits/stdc++.h>
#define ll long long
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define ff first
#define ss second
using namespace std;
const int N = 1e6;
int a[N], b[N];
pair<int, int> p[N];
void solve()
{
ll n,k;
cin >> n >> k;
rep(i,1,n){
int v; // 速度
cin >> p[i].ff >> v;
p[i].ss = i; // 小球开始的序号
b[i] = p[i].ff + v * k; // 假设穿过,k秒后的坐标
}
sort(b + 1, b + 1 + n);
sort(p + 1, p + 1 + n); // 以ff(开始位置)来排序
rep(i,1,n)
a[p[i].ss] = b[i];
rep(i,1,n-1) cout << a[i] << ' ';
cout << a[n];
}
int main(){
solve();
return 0;
}
还没有评论,来说两句吧...