每次求出新的時間後就代替舊有時間,
如此時間差可以馬上求得。
input用fgets先吃,再用sscanf抓資料。
有三行重複……感覺很醜,但是位置也不能改啊 orz。
/* ACM 10281 Average Speed
* mythnc
* 2011/12/31 08:12:03
* run time: 0.008
*/
#include <stdio.h>
#define LINEMAX 20
int main(void)
{
char line[LINEMAX];
int h, m, s, t1, t2;
int newv, v;
double dis;
h = m = s = t1 = v = 0;
dis = 0.0;
while (fgets(line, LINEMAX, stdin))
if (sscanf(line, "%d:%d:%d %d", &h, &m, &s, &newv) == 4) {
t2 = h * 3600 + m * 60 + s;
dis += (double)((t2 - t1) * v) / 3600.0;
t1 = t2;
v = newv;
}
else if (sscanf(line, "%d:%d:%d", &h, &m, &s) == 3) {
t2 = h * 3600 + m * 60 + s;
dis += (double)((t2 - t1) * v) / 3600.0;
t1 = t2;
/* output */
printf("%02d:%02d:%02d %.2f km\n", h, m, s, dis);
}
return 0;
}
沒有留言:
張貼留言