Posts List

2013년 8월 11일 일요일

ClockSync

Initial think

#include <stdio.h>

int c;
int clkTime[16];
int clkOfSW[10][5] = {
    {0,1,2,-1,-1},//0
    {3,7,9,11,-1},
    {4,10,14,15,-1},
    {0,4,5,6,7},
    {6,7,8,10,12},
    {0,2,14,15,-1},//5
    {3,14,15,-1,-1},
    {4,5,7,14,15},
    {1,2,3,4,5},
    {3,4,5,9,13}//9
};
int swSize2[10] = {3,4,4,5,5,4,3,5,5,5};

int swOfClk[16][4] = {
    {0,3,5,-1},
    {0,8,-1,-1},
    {0,5,8,-1},
    {1,6,8,9},
    {2,3,5,8},
    {3,7,8,9},//5
    {3,4,-1,-1},
    {1,3,4,7},
    {4,-1,-1,-1},
    {1,9,-1,-1},
    {2,4,-1,-1},//10
    {1,-1,-1,-1},
    {4,-1,-1,-1},
    {9,-1,-1,-1},
    {2,5,6,7},
    {2,5,6,7}//15
};
int swSize[16]= {3,2,3,4,4,4,2,4,1,2,2,1,1,1,4,4};
int curMin,cnt;
void sub();

FILE* fin;
FILE* fout;
int press[20000];
int pressCnt;

void main()
{
    fin = fopen("in.txt","r");
    fout = fopen("out.txt","w");

    //scanf("%d", &c);
    fscanf(fin,"%d",&c);
    for (int i=0; i<c; i++)
    {
        for (int j=0; j<16; j++)
            //scanf("%d",&(clkTime[j]));
            fscanf(fin,"%d",&(clkTime[j]));

        curMin = 65535;
        cnt= 0;
        pressCnt=0;
        sub();
        //printf("%d\n",curMin);
        fprintf(fout,"%d\n",curMin);
    }

    fclose(fin);
    fclose(fout);
}

void sub()
{
    int clk = 0;
    while (clk<15)
    {
        if (clkTime[clk] != 12) {
            break;
        }
        clk++;
    }

    if (clk == 15)
    {
        if(curMin > cnt)
        {
            curMin = cnt;
            fprintf(fout,"clk=15. cnrMin=%d\n\n",curMin);
        }
        return;
    }

    for(int sw=0; sw<swSize[clk]; sw++)
    {
        for (int cc=0; cc<swSize2[sw]; cc++)
        {
            clkTime[clkOfSW[sw][cc]] += 3;
            if(clkTime[clkOfSW[sw][cc]] > 12) clkTime[clkOfSW[sw][cc]] -= 12;
        }
        cnt++;
        press[pressCnt++] = sw;
        fprintf(fout, "%d press. cnt=%d\n", sw, cnt);
        for(int jj=0; jj<pressCnt; jj++)    fprintf(fout,"%d ", press[jj]);     fprintf(fout,"\ntime: ");
        for(int jj=0; jj<16; jj++)          fprintf(fout,"%d ", clkTime[jj]);   fprintf(fout,"\n");

        sub();

        for (int cc=0; cc<swSize2[sw]; cc++)
        {
            clkTime[clkOfSW[sw][cc]] -= 3;
            if(clkTime[clkOfSW[sw][cc]] == 0) clkTime[clkOfSW[sw][cc]] = 12;
        }
        cnt--;
        pressCnt--;
        fprintf(fout, "%d unpress. cnt=%d\n", sw, cnt);
        for(int jj=0; jj<pressCnt; jj++)    fprintf(fout,"%d ", press[jj]);     fprintf(fout,"\ntime: ");
        for(int jj=0; jj<16; jj++)          fprintf(fout,"%d ", clkTime[jj]);   fprintf(fout,"\n");
    }
}

댓글 없음:

댓글 쓰기