Description
You have bought a car in order to drive from Waterloo to a big city. The odometer on their car is broken, so you cannot measure distance. But the speedometer and cruise control both work, so the car can maintain a constant speed which can be adjusted from time to time in response to speed limits, traffic jams, and border queues. You have a stopwatch and note the elapsed time every time the speed changes. From time to time you wonder, "how far have I come?". To solve this problem you must write a program to run on your laptop computer in the passenger seat.
Input
Standard input contains several lines of input: Each speed change is indicated by a line specifying the elapsed time since the beginning of the trip (hh:mm:ss), followed by the new speed in km/h. Each query is indicated by a line containing the elapsed time. At the outset of the trip the car is stationary. Elapsed times are given in non-decreasing order and there is at most one speed change at any given time.
Output
For each query in standard input, you should print a line giving the time and the distance travelled, in the format below.
Sample Input
00:00:01 100 00:15:01 00:30:01 01:00:01 50 03:00:01 03:00:05 140
Sample Output
00:15:01 25.00 km 00:30:01 50.00 km 03:00:01 200.00 km
题目大意 很简单 ,但有几点需要注意 : 第一 ,第一行 没有速度 要也要 输出 “0.00 km”; 第二 ,输入数据时 ,用 scanf或是 cin 会 RE !! 要用 gets()~ 第三 ,这一点比较奇怪 ,我写的这个程序,用G++交能AC ,但用C++交 会 RE~ 具体讲解请看代码:#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<string> #include<cmath> using namespace std; int hh[100500],mm[100500],ss[100500]; char s[1000]; double speed[100500],lu[100500]; int main() { int i = 1,j; memset(s,'\0',sizeof(s)); while (gets(s)) { hh[i]=(s[0]-'0')*10 + (s[1]-'0'); mm[i]=(s[3]-'0')*10 + (s[4]-'0'); ss[i]=(s[6]-'0')*10 + (s[7]-'0'); lu[1] = 0; int sumt; if(s[8]==' ') { int l = strlen(s); int k; speed[i]=0; for(k=9;k<l;k++) { speed[i]*=10; speed[i]+=(s[k]-'0'); } if(i > 1) { sumt = (hh[i]-hh[i-1])*3600 + (mm[i]-mm[i-1])*60 + (ss[i]-ss[i-1]); lu[i] = sumt * speed[j]/3.6 + lu[i-1]; } j=i; i++; memset(s,'\0',sizeof(s)); continue; } else { if(i > 1) { sumt = (hh[i]-hh[i-1])*3600 + (mm[i]-mm[i-1])*60 + (ss[i]-ss[i-1]); lu[i] = sumt * speed[j]/3.6 + lu[i-1]; printf("%02d:%02d:%02d %.2f km\n",hh[i],mm[i],ss[i],lu[i]/1000); } else printf("%02d:%02d:%02d %.2f km\n",hh[i],mm[i],ss[i],lu[i]/1000); memset(s,'\0',sizeof(s)); i++; } } return 0; }