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の問題は苦手。