SRM457 Div1 Easy(250) TheTriangleBothDivs

TheTriangleBothDivs

時計の表示を全て生成して、timeとの整合性を調べ、最小の時刻を返す。

#include <string>
#include <stdio.h>

using namespace std;

class TheTriangleBothDivs
{
    bool check( string t1, string t2 );

public:
    string fix( string time );
};

string TheTriangleBothDivs::fix( string time )
{
    string ans = "23:59";

    for ( int h=0; h<24; h++ )
    for ( int m=0; m<60; m++ )
    for ( int o=-9; o<=+9; o++ )
    {
        char disp[16];
        sprintf( disp, "%02d:%02d GMT%+2d", h, m, o );

        char gmt[16];
        sprintf( gmt, "%02d:%02d", (h-o+24)%24, m );

        if ( gmt < ans  &&
             check( time, disp ) )
            ans = gmt;
    }

    return ans;
}

bool TheTriangleBothDivs::check( string t1, string t2 )
{
    for ( int i=0; i<11; i++ )
        if ( t1[i] != '?'  &&  t1[i] != t2[i] )
            return false;
    return true;
}