TopCoder SRM 172 DIV 1 Easy 練習

問題

12時間表記のアナログ時計がふたつあって、ひとつは壊れてて、一時間の秒数がおかしい。もうひとつは正常。

この二つの時計が今指している時刻が与えられるので、次にこの二つの時計が同じ時刻を指すのは何時間後か求めなさい。

数学の問題。

まず分も秒も全部時間に直す。その上で二つの時刻の差と、一時間の秒数の差を求める。

もし壊れてる方が早いなら追いつくまでの時間を、壊れてる方が遅いなら追いつかれるまでの時間を求める。

using System;
using System.Text;
using System.Text.RegularExpressions;
using System.Collections;
using System.Collections.Generic;

public class BadClock {
    private double parse(string t)
    {
        string[] s = t.Split(":".ToCharArray());
        return (int.Parse(s[0]) % 12) * 3600 + int.Parse(s[1]) * 60 + int.Parse(s[2]);
    }
    
    public double nextAgreement(string trueTime, string skewTime, int hourlyGain) {
        double tt = parse(trueTime) / 3600.0, st = parse(skewTime) / 3600.0;
        double tp = 1.0, sp = 1.0 + hourlyGain / 3600.0;
        double dx = (st - tt + 12.0) % 12.0;    // 時刻の差
        if (Math.Abs(dx) < 1e-9) return 0.0;
        double dr = sp - tp;
        if (hourlyGain > 0)  // skewの方が早く進む
            return (12 - dx) / dr;
        else
            return Math.Abs(dx / dr);
    }
}

どうもこういうMathの問題は苦手。