SRM515 Div1Easy RotatedClock

問題URL:RotatedClock
プロコンほとんど関係ないんですけど、河合塾ひらめく数学チャレンジ2018の第2弾-3問目に今回の類題があるので、時計問題マニアの方にはおすすめです。ちなみに第1弾-3問目は完全にAnts

考察

0時に対して短針が30k+n°であるとき、長針は12n°であるのが適切な位置関係。0時にあたる基準を0~11の範囲で全探索して、いい感じになればok。

実装

基準を置く代わりに短針と長針を30°ずつずらす。これを12回やる。30k+n°n°は基準によらず一定。なので先に求めたけどあんまり意味ない。最後、解答を文字列に直すのが一番だるい。printf("%02d:%02d")使いたい。

#include <bits/stdc++.h>
using namespace std;

class RotatedClock {
public:
    string getEarliest( int hourHand, int minuteHand ){
        int h=hourHand%30*12;
        int ansh=20,ansm=20;
        for(int i=0;i<12;i++){
            hourHand-=30;
            if(hourHand<0) hourHand+=360;
            minuteHand-=30;
            if(minuteHand<0) minuteHand+=360;
            if(minuteHand==h){
                if(hourHand/30<ansh){
                    ansh=hourHand/30;
                    ansm=minuteHand/6;
                }
            }
        }
        string ret;
        if(ansh!=20){
            if(ansh<10) ret+="0";
            ret+=to_string(ansh);
            ret+=":";
            if(ansm<10) ret+="0";
            ret+=to_string(ansm);
        }
        return ret;
    }
};