~cpp
#include <stdio.h>
int solve(int *);
int evalMeets(int);
int accumCount(int);
double meetPins[11] = {0, 5.5 + 1 * 60, 10.5 + 2 * 60, 16.5 + 3 * 60,
21.5 + 4 * 60, 27.5 + 5 * 60, 32.5 + 6 * 60,
38.5 + 7 * 60, 43.5 + 8 * 60, 49.5 + 9 * 60, 54.5 + 10 * 60};
int main(void) {
int num, input[4], i, j, output[10] = {0, };
scanf("%d", &num);
i = 0, j = num;
while (j--) {
scanf("%d%d%d%d", &input[0], &input[1], &input[2], &input[3]);
output[i] = solve(input);
i++;
}
i = 0;
while (num--)
printf("%d\n", output[i++]);
return 0;
}
int solve(int * arg) {
int startTime, endTime, ret = 0;
if (arg[0] == 12)
arg[0] = 0;
if (arg[2] == 12)
arg[2] = 0;
startTime = arg[0] * 60 + arg[1];
endTime = arg[2] * 60 + arg[3];
if (evalMeets(startTime))
ret++;
while ( startTime = (++startTime % 720), startTime != endTime )
if (evalMeets(startTime))
ret++;
return ret;
}
int evalMeets(int curTime) {
int prev, present;
if (!curTime)
return 1;
prev = accumCount(curTime);
present = accumCount(++curTime);
if (prev != present)
return 1;
return 0;
}
int accumCount(int time) {
int i, ret;
for (i = 0, ret = 0; i < 11; i++)
if (time < meetPins[i])
ret++;
else
ret--;
return ret;
}
대회에서 한 소스는 아니고요, 방금 짠 소스 입니다. 메인아이디어는 대회시 생각했던 것과 같습니다만, 대회때는 시침이 움직이는 것을 생각하지 못해서 실패했었군요.