当前位置:   article > 正文

Educational Codeforces Round 100 (Rated for Div. 2) C. Busy Robot(模拟+思维)

educational codeforces round 100 (rated for div. 2)

 

 

 

给出 n 个操作,t[i] x[i] 表示在 t[i] 时刻开始移动至 x[i] 位置,如果机器人在某一时刻正在移动,那么他将不听当前操作,继续执行原来的操作,如果静止,那么执行当前操作,初始时静止

由于题目将时间和空间相关联,思路比较绕;

首先要明白如果机器人不动,其位置不改变但是时间一直改变

设计四个量 pos,tag 为当前位置和目标位置,cur,next 为当前时间和移动结束时间,这样 next=tag-pos+cur 等式成立,将时间和空间关联起来

这样就比较容易想过来了

  1. const int N=2e5+5;
  2. int n,m;
  3. int i,j,k;
  4. ll x[N];
  5. ll t[N];
  6. signed main()
  7. {
  8. //IOS;
  9. rush(){
  10. sd(n);
  11. for(int i=1;i<=n;i++) sll(t[i]),sll(x[i]);
  12. t[n+1]=1e10;
  13. ll cur=0,next=0;
  14. ll pos=0,tag=0;
  15. int ans=0;
  16. for(int i=1;i<=n;i++){
  17. if(next<=t[i]){
  18. pos=tag, tag=x[i];
  19. cur=t[i], next=t[i]+abs(x[i]-pos);
  20. //if(x[i]<=pos+t[i+1]-t[i]) ans++;
  21. if(next<=t[i+1]) ans++;
  22. } else{
  23. ll d=t[i]-cur;
  24. if(tag>=pos){
  25. ll l=pos+d;
  26. ll r=min(l+t[i+1]-t[i],tag);
  27. if(x[i]>=l && x[i]<=r) ans++;
  28. } else{
  29. ll l=pos-d;
  30. ll r=max(l-(t[i+1]-t[i]),tag);
  31. if(x[i]>=r && x[i]<=l) ans++;
  32. }
  33. }
  34. }
  35. pd(ans);
  36. }
  37. PAUSE;
  38. return 0;
  39. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/55040?site
推荐阅读
相关标签
  

闽ICP备14008679号