解説

Ai(1iN)A_i \lparen 1 \leq i \leq N \rparen に対して AirBk<AiA_i-r \leq B_k < A_iを満たす kk が存在することが判定できればよいです。
二分探索によって配列 BB から AirA_i-r 以上の最小の値を求め、それが AiA_i 未満であれば敵の体力を減らし、そうでなければプレイヤーの体力を減らすことで、 全体では O(NlogM)O(N \log M) で解を求めることができるため、十分高速です。

回答例