1463C - Busy Robot

1463C - Busy Robot

题意: 有一个机器人在一维的数轴上面运动,他的速度是1,0s的时候他在原点,给出n个指令, p i , t i p_i, t_i pi,ti ,表示在 p i p_i pi 让机器人开始去 t i t_i ti, 如果机器人在行进中下了指令,会ignore,定义:成功的指令是在 t i , t i + 1 t_i, t_{i+ 1} ti,ti+1 到达了 p i p_i pi,ignore的指令也有可能是成功的(

就硬模拟(… 有点细节 so mark一下

  1. longlong
  2. 题意刚开始没读清楚*

code

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
const int N = 1e5 + 10;
struct node {
    
    
	ll t, p;	
} mp[N]; 

int main() {
    
    
//	freopen("in.txt", "r", stdin);
	ll T;
	cin >> T;
	while(T--) {
    
    
		ll n;
		cin >> n;
		ll ans = 0;
		for(ll i = 1; i <= n; ++ i) {
    
    
			cin >> mp[i].t >> mp[i].p;
		}
		mp[n + 1].t = 2e18;
		ll tim = 1, lastt = 1, pos = 0, lastp = 0;
		for(ll i = 1; i <= n; ++ i) {
    
    
			
			if(mp[i].t < tim) {
    
    
				ll dir;
				if(pos < lastp) dir = -1;
				else if(pos == lastp) dir = 0;
				else dir = 1;
				
				ll nowp = lastp + dir * (mp[i].t - lastt);
				ll nowp2 = lastp + dir * ((min(tim, mp[i + 1].t)) - lastt);
				if((nowp <= mp[i].p && mp[i].p <= nowp2) ||
					(nowp2 <= mp[i].p && mp[i].p <= nowp)) ++ ans;
			}
			else {
    
    
				lastt = max(tim, mp[i].t);
				tim = mp[i].t + abs(mp[i].p - pos) ; 
				lastp = pos;
				pos = mp[i].p;
				if(tim <= mp[i + 1].t) ++ ans;	
			}
		}
		cout << ans << endl;
	}
	
} 

猜你喜欢

转载自blog.csdn.net/qq_39602052/article/details/113914629
今日推荐