| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
那位高手帮我分析下代码!不怎么懂! 1211 traffic lights#include <stdio.h>
#define MAXTIME 18000
int p[100];
int n, flag;
int Input()
{
int time;
scanf("%d", &time);
if(time == 0) return 0;
for(n = 0; time > 0;)
{
p[n++] = time;
scanf("%d", &time);
}
return 1;
}
void Solve()
{
int i, j, min;
for(min = p[0], i = 0; i < n; i++) // 找到一个最小值,因为间隔至少要从最小值的2倍开始计算
if(min > p[i])
min = p[i];
min *= 2;
for(flag = 0; (min <= MAXTIME) && !flag;)
{
for(flag = 1, i = 0; i < n; i++)
{
j = min%(2*p[i]); // 同样min看看对其余p的两倍的模
if(j >= p[i]-5) // 落在黄灯时间段,也是不行的
{
flag = 0;
min += 2*p[i]-j;
}
if(min > MAXTIME)break;
}
}
if(min > MAXTIME)printf("Signals fail to synchronise in 5 hours\n");
else printf("%02d:%02d:%02d\n",min/3600,(min/60)%60,min%60);
}
int main()
{
#if 0
freopen("f.in", "r", stdin);
freopen("t.out", "w", stdout);
#endif
while( Input() ) Solve();
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator