保存不完整数字可能对应的数字,注意小时<24,分钟小于59.
AC代码
#include <stdio.h>
#include <vector>
using namespace std;
const int maxn = + ;
char s[][maxn];
int ret[maxn], tol;
vector<int> a[];
int h, m;
char dig[][] = {
' ','_',' ','|',' ','|','|','_','|',
' ',' ',' ',' ',' ','|',' ',' ','|',
' ','_',' ',' ','_','|','|','_',' ',
' ','_',' ',' ','_','|',' ','_','|',
' ',' ',' ','|','_','|',' ',' ','|',
' ','_',' ','|','_',' ',' ','_','|',
' ','_',' ','|','_',' ','|','_','|',
' ','_',' ',' ',' ','|',' ',' ','|',
' ','_',' ','|','_','|','|','_','|',
' ','_',' ','|','_','|',' ','_','|'}; void dfs(int num) {
if(num >= ) {
int x = (ret[]* + ret[])* + (ret[]*+ret[]);
int y = (ret[]* + ret[])* + (ret[]*+ret[]);
if(x > *+ || y > *+) {
return;
}
if((y+) % (*) == x) {
//printf("%d : %d %d : %d\n", ret[0]*10+ret[1],ret[2]*10+ret[3],ret[4]*10 + ret[5],ret[6]*10+ret[7]);
h = ret[]* + ret[];
m = ret[]*+ret[];
tol++;
}
return;
}
if(tol > ) return;;
for(int i = ; i < a[num].size(); i++) {
ret[num] = a[num][i];
dfs(num+);
}
} int main() {
int T;
scanf("%d", &T);
getchar();
while(T--) {
tol = ;
for(int i = ; i < ; i++) a[i].clear();
for(int i = ; i < ; i++) {
fgets(s[i], sizeof(s[i]), stdin);
}
int num = ;
for(int i = ; i < *+; i+=) {
if(i==) {
i = ;
continue;
}
vector<char> b;
for(int j = ; j < ; j++) {
for(int k = i; k < i+; k++) {
b.push_back(s[j][k]);
}
}
// compare
for(int j = ; j < ; j++) {
int f = ;
for(int k = ; k < ; k++) {
if(dig[j][k] != b[k] && (b[k] == '_' || b[k] == '|')) f = ;
}
if(f) {
if(num % == ) {
if(j <= ) a[num].push_back(j);
}else if(num % == ) {
if(j <= ) a[num].push_back(j);
}else {
a[num].push_back(j);
}
}
}
num++;
}
dfs();
if(tol != ) printf("Not Sure\n");
else printf("%02d%02d\n", h, m);
}
return ;
}
如有不当之处欢迎指出!