赞
踩
给出 n 个操作,t[i] x[i] 表示在 t[i] 时刻开始移动至 x[i] 位置,如果机器人在某一时刻正在移动,那么他将不听当前操作,继续执行原来的操作,如果静止,那么执行当前操作,初始时静止
由于题目将时间和空间相关联,思路比较绕;
首先要明白如果机器人不动,其位置不改变但是时间一直改变
设计四个量 pos,tag 为当前位置和目标位置,cur,next 为当前时间和移动结束时间,这样 next=tag-pos+cur 等式成立,将时间和空间关联起来
这样就比较容易想过来了
- const int N=2e5+5;
-
- int n,m;
- int i,j,k;
- ll x[N];
- ll t[N];
-
- signed main()
- {
- //IOS;
- rush(){
- sd(n);
- for(int i=1;i<=n;i++) sll(t[i]),sll(x[i]);
- t[n+1]=1e10;
- ll cur=0,next=0;
- ll pos=0,tag=0;
- int ans=0;
- for(int i=1;i<=n;i++){
- if(next<=t[i]){
- pos=tag, tag=x[i];
- cur=t[i], next=t[i]+abs(x[i]-pos);
- //if(x[i]<=pos+t[i+1]-t[i]) ans++;
- if(next<=t[i+1]) ans++;
- } else{
- ll d=t[i]-cur;
- if(tag>=pos){
- ll l=pos+d;
- ll r=min(l+t[i+1]-t[i],tag);
- if(x[i]>=l && x[i]<=r) ans++;
- } else{
- ll l=pos-d;
- ll r=max(l-(t[i+1]-t[i]),tag);
- if(x[i]>=r && x[i]<=l) ans++;
- }
- }
- }
- pd(ans);
- }
- PAUSE;
- return 0;
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。