Processing math: 100%
(Analysis by Ben Chen)

First consider the case where all jump pads have a positive v. We may directly simulate Bessie's process. At a given power p, Bessie will jump at most np times before she exits the number line or she hits a jump pad, in which her power increases. Therefore the number of bounces is bounded by ni=1ni=O(nlg(n)).

When there are jump pads with with value 0, then there's a possibility Bessie can get stuck in an infinite loop. This happens only when Bessie hits a jump pad of value 0, switches direction, and after some bounces, the next jump pad she hits is also value 0. It is possible to check for this infinite loop cycle, but it's easier to implement just simulating Bessie's bounces for enough iterations (about O(nlg(n))) since Bessie won't break additional targets while stuck in a loop.

Sample implementation:

#include <bits/stdc++.h>
using namespace std;
 
int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	int n, x;
	cin >> n >> x;
	vector<pair<int, int>> pad(n + 1);
	vector<bool> vis(n + 1);
	for (int i = 1; i <= n; ++i)
		cin >> pad[i].first >> pad[i].second;
	int dir = 1, power = 1, ans = 0;
	for (int reps = 0; reps < 5000000 && 1 <= x && x <= n; ++reps) {
		// Bessie breaks a target she hasn't broken before
		if (pad[x].first == 1 && power >= pad[x].second && !vis[x]) {
			vis[x] = true;
			++ans;
		}
		if (pad[x].first == 0) { // jump pad
			dir *= -1;
			power += pad[x].second;
		}
		x += dir * power;
	}
	cout << ans << "\n";
	return 0;
}