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");
}
}
댓글 없음:
댓글 쓰기