SRM598 II H
解法
(a). mov1 >= d (先手が仕留められる距離)
- Ciel勝利
(b). mov1 < d かつ mov2 < d のとき(お互い十分距離が離れているとき)
- (1). 2*mov1 < mov2 => Liss (Liss は攻撃できるがCielは攻撃できない位置に移動できるため)
- (2). mov1 > 2*mov2 => Ciel (b.1 の逆パターン)
- (3). otherwise => Draw (両方共近づくとやられるパターン)
(c). mov1 < d かつ mov2 >= d のとき(Cielが逃げるしかないパターン)
- (1). mov1 + d <= mov2 => Liss (Ciel が逃げても無駄)
- (2). mov1 + d > mov2 => Cielが逃げれば(b)に帰着
コード
class FoxAndFencingEasy { public: string WhoCanWin(int mov1, int mov2, int d) { if (mov1 > min(2*mov2, d-1)) return "Ciel"; if (min(2*mov1, mov1+d-1) < mov2) return "Liss"; return "Draw"; } }