おじさんの競プロ記録

自分の力で解答できた問題を振り返り、理解を深めたいです。

AtCoder Regular Contest 054 A - 動く歩道

問題について考えたこと

問題文へ

時計回りと反時計回りの両方を計算して、比較することにしました。

動く歩道なので、高橋君の移動速度YがXを上回らないと反時計回りはできません。

移動距離もSとDの大小関係と移動方向で計算しました。

#define _GIBCXX_DEBUG
#include <bits/stdc++.h>
using namespace std;
#define rep(i, n) for (int i = 0; i < (n); ++i)
#define all(v) v.begin(), v.end()
using namespace std;
using ll = long long;
template<class T> inline bool chmin(T& a, T b) { if (a > b) { a = b; return 1; } return 0; }


int main(void) {
  int L, X, Y, S, D;
  cin >> L >> X >> Y >> S >> D;

  int dist = 0;
  // 時計回り
  if (S <= D) dist = D - S;
  else dist = L - S + D;
  double ans = (double)(dist) / (double)(X + Y);

  // 反時計回り
  if (Y - X > 0) {
    if (S <= D) dist = L - D + S;
    else dist = S - D;
    chmin(ans, (double)(dist) / (double)(Y - X)); 
  }

  cout << fixed << setprecision(10);
  cout << ans << endl;
  
  return 0;
}