SRM 457 DIV1 Easy - TheTriangleBothDivs

問題


http://community.topcoder.com/stat?c=problem_statement&pm=10696&rd=14144

”17:45 GMT-4”と時刻を表す時計がある。
ただし時計の一部が壊れており、その箇所は?になっている。
このとき、考えられる昇順で一番早い時間を求める。

解き方


法則を考えると大変なため、全探索を用いる必要があるのがわかる。

ここでのコツは、すべての数字を前端さ区しようとするのではなくて
すべての文字列を発生させて全探索する。

コード


string ret;

class TheTriangleBothDivs {

public:

void rec(string time, int pos){
if(pos>=time.size()){
int h=(time[0]-'0')*10+(time[1]-'0');
int m=(time[3]-'0')*10+(time[4]-'0');
int d=time[10]-'0';

if(time[9]=='-' && d==0)return;
if(h>=24 || m>=60)return;
if(time[9]=='-')d=-d;

char ch[50];
sprintf(ch,"%02d:%02d",((h-d)+24)%24,m);
if(ch<ret)ret=ch;

}else if(time[pos]=='?'){
string str="0123456789";
if(pos==9)str="-+";
FORE(i,0,str.size()){
time[pos]=str[i];
rec(time,pos+1);
time[pos]='?';
}
}else rec(time,pos+1);
}

string fix(string time) {
ret="99:99";
rec(time,0);
return ret;
}

};

Share this

Related Posts

Previous
Next Post »