F. chino with ball

冷不防 2022-10-13 05:25 56阅读 0赞

题目大意

有 N N N 个小球在光滑水平的地上,初始速度有三种情况, − 1 , 0 , 1 -1, 0, 1 −1,0,1

求 k k k 秒后各个小球的位置


题解

可以把小球碰撞后当作是穿过去了,这样编号就乱了,用起始的位置来维护一下。


代码

  1. #include<bits/stdc++.h>
  2. #define ll long long
  3. #define rep(i,a,b) for(int i=a;i<=b;++i)
  4. #define ff first
  5. #define ss second
  6. using namespace std;
  7. const int N = 1e6;
  8. int a[N], b[N];
  9. pair<int, int> p[N];
  10. void solve()
  11. {
  12. ll n,k;
  13. cin >> n >> k;
  14. rep(i,1,n){
  15. int v; // 速度
  16. cin >> p[i].ff >> v;
  17. p[i].ss = i; // 小球开始的序号
  18. b[i] = p[i].ff + v * k; // 假设穿过,k秒后的坐标
  19. }
  20. sort(b + 1, b + 1 + n);
  21. sort(p + 1, p + 1 + n); // 以ff(开始位置)来排序
  22. rep(i,1,n)
  23. a[p[i].ss] = b[i];
  24. rep(i,1,n-1) cout << a[i] << ' ';
  25. cout << a[n];
  26. }
  27. int main(){
  28. solve();
  29. return 0;
  30. }

发表评论

表情:
评论列表 (有 0 条评论,56人围观)

还没有评论,来说两句吧...

相关阅读

    相关 F. chino with ball

    题目大意 有 N N N 个小球在光滑水平的地上,初始速度有三种情况, − 1 , 0 , 1 -1, 0, 1 −1,0,1 求 k k k 秒后各个小球的位置