poj 1676

保存不完整数字可能对应的数字,注意小时<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;
}

如有不当之处欢迎指出!

posted @ 2018-03-28 17:48  flyawayl  阅读(336)  评论(0编辑  收藏  举报