题意: 有一个机器人在一维的数轴上面运动,他的速度是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一下
- longlong
- 题意刚开始没读清楚*
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;
}
}