PKU 1676 What time is it?

http://poj.org/problem?id=1676
何本かの棒が点灯していないかもしれない15分ずれているデジタル表示の時計が入力されるので、その表示から時刻が特定できればその表示を、出来なければそのことを出力しろというような問題。

関数に分けて頑張りました。

string in[3];

string digi[]={
  " _     _  _     _  _  _  _  _ ",
  "| |  | _| _||_||_ |_   ||_||_|",
  "|_|  ||_  _|  | _||_|  ||_| _|",
};

bool neq(int ti,int p){
  rep(i,3)rep(j,3){
    if(digi[i][ti*3+j]==' ' && in[i][p+j]!=' ')return true;
  }
  return false;
}

bool ok(int ti,int p){
  if(neq(ti/600,p))return false;
  if(neq(ti/60%10,p+3))return false;
  if(neq(ti%60/10,p+6))return false;
  if(neq(ti%10,p+9))return false;

  return true;
}

bool check(int ti){
  return ok(ti,0)&&ok((ti-15+24*60)%(24*60),13);
}

void solve(){
  rep(i,3)getline(cin,in[i]);
  set<int> ans;
  rep(i,24*60)if(check(i))ans.insert(i);

  if(SZ(ans)==1)printf("%02d%02d\n",*ans.begin()/60,*ans.begin()%60);
  else cout<<"Not Sure\n";
}

main(){
  int T;
  cin>>T;
  cin.get();
  while(T--)solve();
}