POJ 1676

#include<stdio.h>
#include<string.h>
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        getchar();
        int a1[100],a2[100],a3[101],a4[101],a5[101],a6[101],a7[101],a8[100];
        //8个数组分别存8个不完整LED数字可能的数字。
        int cnt1=0,cnt2=0,cnt3=0,cnt4=0,cnt5=0,cnt6=0,cnt7=0,cnt8=0;
        //八个数字的上限;
        int vis[10];//储存那些不完整LED的数字一定不可能的数字
        char str[4][30];
        for(int i=0; i<3; i++)
            gets(str[i]);
        memset(vis,0,sizeof(vis));
        //举第一个for循环当列子
        for(int i=0; i<3; i++)
        {
            for(int j=0; j<3; j++)
            {
                if(str[i][j]=='|')
                {
                    int y=j-0;
                    if(i==1)
                    {
                        if(y==0)
                        {
                            vis[1]++,vis[2]++,vis[3]++,vis[7]++;//如果在这个出现'|'那么这个LED数字就不可能是1、2、3、7了
                        }
                        else if(y==2)
                        {
                            vis[5]++,vis[6]++;//如果在这个出现'|'那么这个LED数字就不可能是5,6了
                        }
                    }
                    else if(i==2)
                    {
                        if(y==0)
                        {
                            vis[1]++,vis[3]++,vis[4]++,vis[5]++;
                            vis[7]++,vis[9]++;//如果在这个出现'|'那么这个LED数字就不可能是1,3,4,5,7,9了;
                        }
                        else if(y==2)
                        {
                            vis[2]++;//如果在这个出现'|'那么这个LED数字就不可能是2了
                        }
                    }
                }
                else if(str[i][j]=='_')
                {
                    if(i==0)
                    {
                        vis[1]++,vis[4]++;//如果在这个出现'_'那么这个LED数字就不可能是1,4了
                    }
                    else if(i==1)
                    {
                        vis[0]++,vis[1]++,vis[7]++;//如果在这个出现'_'那么这个LED数字就不可能是0,1,7了
                    }
                    else if(i==2)
                    {
                        vis[1]++,vis[4]++,vis[7]++;//如果在这个出现'_'那么这个LED数字就不可能是1,4,7了
                    }
                }
            }
        }
        for(int i=0; i<10; i++)
            if(vis[i]==0)
                a1[cnt1++]=i;
        memset(vis,0,sizeof(vis));
        for(int i=0; i<3; i++)
        {
            for(int j=3; j<6; j++)
            {
                if(str[i][j]=='|')
                {
                    int y=j-3;
                    if(i==1)
                    {
                        if(y==0)
                        {
                            vis[1]++,vis[2]++,vis[3]++,vis[7]++;
                        }
                        else if(y==2)
                        {
                            vis[5]++,vis[6]++;
                        }
                    }
                    else if(i==2)
                    {
                        if(y==0)
                        {
                            vis[1]++,vis[3]++,vis[4]++,vis[5]++;
                            vis[7]++,vis[9]++;
                        }
                        else if(y==2)
                        {
                            vis[2]++;
                        }
                    }
                }
                else if(str[i][j]=='_')
                {
                    if(i==0)
                    {
                        vis[1]++,vis[4]++;
                    }
                    else if(i==1)
                    {
                        vis[0]++,vis[1]++,vis[7]++;
                    }
                    else if(i==2)
                    {
                        vis[1]++,vis[4]++,vis[7]++;
                    }
                }
            }
        }
        for(int i=0; i<10; i++)
            if(vis[i]==0)
                a2[cnt2++]=i;
        memset(vis,0,sizeof(vis));
        for(int i=0; i<3; i++)
        {
            for(int j=6; j<9; j++)
            {
                if(str[i][j]=='|')
                {
                    int y=j-6;
                    if(i==1)
                    {
                        if(y==0)
                        {
                            vis[1]++,vis[2]++,vis[3]++,vis[7]++;
                        }
                        else if(y==2)
                        {
                            vis[5]++,vis[6]++;
                        }
                    }
                    else if(i==2)
                    {
                        if(y==0)
                        {
                            vis[1]++,vis[3]++,vis[4]++,vis[5]++;
                            vis[7]++,vis[9]++;
                        }
                        else if(y==2)
                        {
                            vis[2]++;
                        }
                    }
                }
                else if(str[i][j]=='_')
                {
                    if(i==0)
                    {
                        vis[1]++,vis[4]++;
                    }
                    else if(i==1)
                    {
                        vis[0]++,vis[1]++,vis[7]++;
                    }
                    else if(i==2)
                    {
                        vis[1]++,vis[4]++,vis[7]++;
                    }
                }
            }
        }
        for(int i=0; i<10; i++)
            if(vis[i]==0)
                a3[cnt3++]=i;
        memset(vis,0,sizeof(vis));
        for(int i=0; i<3; i++)
        {
            for(int j=9; j<12; j++)
            {
                if(str[i][j]=='|')
                {
                    int y=j-9;
                    if(i==1)
                    {
                        if(y==0)
                        {
                            vis[1]++,vis[2]++,vis[3]++,vis[7]++;
                        }
                        else if(y==2)
                        {
                            vis[5]++,vis[6]++;
                        }
                    }
                    else if(i==2)
                    {
                        if(y==0)
                        {
                            vis[1]++,vis[3]++,vis[4]++,vis[5]++;
                            vis[7]++,vis[9]++;
                        }
                        else if(y==2)
                        {
                            vis[2]++;
                        }
                    }
                }
                else if(str[i][j]=='_')
                {
                    if(i==0)
                    {
                        vis[1]++,vis[4]++;
                    }
                    else if(i==1)
                    {
                        vis[0]++,vis[1]++,vis[7]++;
                    }
                    else if(i==2)
                    {
                        vis[1]++,vis[4]++,vis[7]++;
                    }
                }
            }
        }
        for(int i=0; i<10; i++)
            if(vis[i]==0)
                a4[cnt4++]=i;
        memset(vis,0,sizeof(vis));
        for(int i=0; i<3; i++)
        {

            for(int j=13; j<16; j++)
            {
                if(str[i][j]=='|')
                {
                    int y=j-13;
                    if(i==1)
                    {
                        if(y==0)
                        {
                            vis[1]++,vis[2]++,vis[3]++,vis[7]++;
                        }
                        else if(y==2)
                        {
                            vis[5]++,vis[6]++;
                        }
                    }
                    else if(i==2)
                    {
                        if(y==0)
                        {
                            vis[1]++,vis[3]++,vis[4]++,vis[5]++;
                            vis[7]++,vis[9]++;
                        }
                        else if(y==2)
                        {
                            vis[2]++;
                        }
                    }
                }
                else if(str[i][j]=='_')
                {
                    if(i==0)
                    {
                        vis[1]++,vis[4]++;
                    }
                    else if(i==1)
                    {
                        vis[0]++,vis[1]++,vis[7]++;
                    }
                    else if(i==2)
                    {
                        vis[1]++,vis[4]++,vis[7]++;
                    }
                }
            }
        }
        for(int i=0; i<10; i++)
            if(vis[i]==0)
                a5[cnt5++]=i;
        memset(vis,0,sizeof(vis));
        for(int i=0; i<3; i++)
        {
            for(int j=16; j<19; j++)
            {
                if(str[i][j]=='|')
                {
                    int y=j-16;
                    if(i==1)
                    {
                        if(y==0)
                        {
                            vis[1]++,vis[2]++,vis[3]++,vis[7]++;
                        }
                        else if(y==2)
                        {
                            vis[5]++,vis[6]++;
                        }
                    }
                    else if(i==2)
                    {
                        if(y==0)
                        {
                            vis[1]++,vis[3]++,vis[4]++,vis[5]++;
                            vis[7]++,vis[9]++;
                        }
                        else if(y==2)
                        {
                            vis[2]++;
                        }
                    }
                }
                else if(str[i][j]=='_')
                {
                    if(i==0)
                    {
                        vis[1]++,vis[4]++;
                    }
                    else if(i==1)
                    {
                        vis[0]++,vis[1]++,vis[7]++;
                    }
                    else if(i==2)
                    {
                        vis[1]++,vis[4]++,vis[7]++;
                    }
                }
            }
        }
        for(int i=0; i<10; i++)
            if(vis[i]==0)
                a6[cnt6++]=i;
        memset(vis,0,sizeof(vis));
        for(int i=0; i<3; i++)
        {
            for(int j=19; j<22; j++)
            {
                if(str[i][j]=='|')
                {
                    int y=j-19;
                    if(i==1)
                    {
                        if(y==0)
                        {
                            vis[1]++,vis[2]++,vis[3]++,vis[7]++;
                        }
                        else if(y==2)
                        {
                            vis[5]++,vis[6]++;
                        }
                    }
                    else if(i==2)
                    {
                        if(y==0)
                        {
                            vis[1]++,vis[3]++,vis[4]++,vis[5]++;
                            vis[7]++,vis[9]++;
                        }
                        else if(y==2)
                        {
                            vis[2]++;
                        }
                    }
                }
                else if(str[i][j]=='_')
                {
                    if(i==0)
                    {
                        vis[1]++,vis[4]++;
                    }
                    else if(i==1)
                    {
                        vis[0]++,vis[1]++,vis[7]++;
                    }
                    else if(i==2)
                    {
                        vis[1]++,vis[4]++,vis[7]++;
                    }
                }
            }
        }
        for(int i=0; i<10; i++)
            if(vis[i]==0)
                a7[cnt7++]=i;
        memset(vis,0,sizeof(vis));
        for(int i=0; i<3; i++)
        {

            for(int j=22; j<25; j++)
            {
                if(str[i][j]=='|')
                {
                    int y=j-22;
                    if(i==1)
                    {
                        if(y==0)
                        {
                            vis[1]++,vis[2]++,vis[3]++,vis[7]++;
                        }
                        else if(y==2)
                        {
                            vis[5]++,vis[6]++;
                        }
                    }
                    else if(i==2)
                    {
                        if(y==0)
                        {
                            vis[1]++,vis[3]++,vis[4]++,vis[5]++;
                            vis[7]++,vis[9]++;
                        }
                        else if(y==2)
                        {
                            vis[2]++;
                        }
                    }
                }
                else if(str[i][j]=='_')
                {
                    if(i==0)
                    {
                        vis[1]++,vis[4]++;
                    }
                    else if(i==1)
                    {
                        vis[0]++,vis[1]++,vis[7]++;
                    }
                    else if(i==2)
                    {
                        vis[1]++,vis[4]++,vis[7]++;
                    }
                }
            }
        }
        for(int i=0; i<10; i++)
            if(vis[i]==0)
                a8[cnt8++]=i;
        int kj1[10101],cc1=0,kj2[10101],cc2=0;
        //kj1[]存前四个数字的所有组合,kj2[]存后面所有四个数字的组合;
        for(int i=0; i<cnt1; i++)
        {
            for(int j=0; j<cnt2; j++)
            {
                for(int k=0; k<cnt3; k++)
                {
                    for(int p=0; p<cnt4; p++)
                    {
                        int sum;
                        if(a1[i]*10+a2[j]>23)//时间是00:00-23:59
                            continue;
                        if(a3[k]*10+a4[p]>=60)//时间是00:00-23:59
                            continue;
                        sum=a1[i]*1000+a2[j]*100+a3[k]*10+a4[p];
                        if(sum<=2359)
                            kj1[cc1++]=sum;
                    }
                }
            }
        }
        for(int i=0; i<cnt5; i++)
        {
            for(int j=0; j<cnt6; j++)
            {
                for(int k=0; k<cnt7; k++)
                {
                    for(int p=0; p<cnt8; p++)
                    {
                        int sum;
                        if(a5[i]*10+a6[j]>23)//时间是00:00-23:59
                            continue;
                        if(a7[k]*10+a8[p]>=60)//时间是00:00-23:59
                            continue;
                        sum=a5[i]*1000+a6[j]*100+a7[k]*10+a8[p];
                        if(sum<=2359)
                            kj2[cc2++]=sum;
                    }
                }
            }
        }
        int jisu=0,kj;
        for(int i=0; i<cc1; i++)
        {
            for(int j=0; j<cc2; j++)
            {
                if(kj1[i]<15)
                {
                    if(kj2[j]+15==2360+kj1[i])//考虑00:00点到23:45这种情况
                    {
                        jisu++;
                        kj=kj1[i];
                    }
                }
                else
                {
                    if(kj1[i]==kj2[j]+15)
                    {
                        jisu++;
                        kj=kj1[i];
                        continue;
                    }
                    int x1=kj1[i]/100;
                    int x2=kj2[j]/100;
                    if(x2+1==x1)
                    {
                        int x3=kj1[i]%100;
                        int x4=kj2[j]%100;
                        if(x3+60==x4+15)
                        {
                            jisu++;
                        kj=kj1[i];
                        }
                    }

                }
            }
        }
        if(jisu==1)//如果可能的情况不是1或者为0都是不正确的。
        {
            int AC[10];
            int aaa=0;
            memset(AC,0,sizeof(AC));//一定要清空数组,因为这个WA了。
            while(kj>0)
            {
                AC[aaa++]=kj%10;
                kj/=10;
            }
            for(int i=3; i>=0; i--)
                printf("%d",AC[i]);
            puts("");
        }
        else
            puts("Not Sure");
    }
    return 0;
}


你可能感兴趣的:(printf)