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