SRM 515 Div2 Medium RotatedClock

問題

時計の短針と長針の角度がわかっている.時計を(1時間毎に)回転させた時,成り立つ時刻の最小値を答えよ.

解答

回転させた時刻により0時からどれだけ何分たったのかわかる.そこから逆算し,短針の角度を求め一致するのか確かめる.一致する時刻の内最小の時刻を返せば良い.

template<class T> inline string toString(T x) {ostringstream sout;sout<<x;return sout.str();}
class RotatedClock
{
public:
  string getEarliest(int hourHand, int minuteHand)
    {
      int i;
      for(i = hourHand % 30; i < 360; i+=30){
        int diff = hourHand - i;
        int h = i;
        int m = (360 + minuteHand - diff) % 360;
        string res="";
        int hour = h/30;
        if ((double)h == (hour*30 + (double)m/12)){
          string res="";
          int hour = h/30;
          int minute = m*60 /360;
          if (hour<10) res+="0";
          res+=toString(hour)+":";
          if (minute < 10) res+="0";
          res+=toString(minute);
          return res;
        }
      }
      return "";
    }
};