模拟,照着说的做就行了。
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const double eps=1e-8; struct data { int h,m,s; double tot,speed; data(int _h,int _m,int _s) { h=_h;m=_m;s=_s; tot=_h*60+_m+_s/60.0; speed=0; } data(){} void print() { if(speed<eps) printf("-\n"); else { speed+=1/120.0; int a=(int)speed,b=(int)(60.0*(speed-(int)speed)); printf("%d:",a); if(b<10) printf("0%d min/km\n",b); else printf("%d min/km\n",b); } } data operator+(const data &b)const { data a; a.h=h+b.h; a.m=m+b.m; a.s=s+b.s; a.tot=a.h*60.0+a.m+a.s/60.0; a.speed=0; return a; } }; int main() { int n,id; double d; scanf("%d%lf",&n,&d); while(scanf("%d",&id)!=EOF) { data a(0,0,0); int h,m,s; printf("%3d: ",id); bool flag=false; for(int i=0;i<n;i++) { char ss[30]; scanf("%s",ss); if(ss[0]=='-'||flag) { flag=true; continue; } sscanf(ss,"%d:%d:%d",&h,&m,&s); a=a+data(h,m,s); } if(!flag) a.speed=a.tot/d; a.print(); } return 0; }