#include<cstdio> #include<algorithm> #include<vector> #include<cstring> using namespace std; const int maxn=1510; int fare[1510]; struct R{ char name[25]; int M,D,h,m; int totalMin; int dayM; bool state; }; bool cmp(R &r1,R &r2) { int f=strcmp(r1.name,r2.name); if(f!=0){ if(f<0)return true; return false; } else { return r1.totalMin<r2.totalMin; } } int n; R rec[maxn]; int main() { //freopen("in.txt","r",stdin); for(int i=0;i<24;i++){ scanf("%d",&fare[i*60]); for(int j=i*60+1;j<(i+1)*60;j++) fare[j]=fare[j-1]; } scanf("%d",&n); for(int i=0;i<n;i++) { char c[20]; scanf("%s %d:%d:%d:%d %s", rec[i].name,&rec[i].M,&rec[i].D,&rec[i].h,&rec[i].m,c); rec[i].totalMin=rec[i].D*24*60+rec[i].h*60+rec[i].m; rec[i].dayM=rec[i].h*60+rec[i].m; if(strcmp(c,"on-line")==0)rec[i].state=true; else rec[i].state=false; } sort(rec,rec+n,cmp); int nxtP=0; while(nxtP<n) { char name[20]; strcpy(name,rec[nxtP].name); int i=nxtP; //在跳过不需要输出的记录遇到了一些困难 //参考算法笔记的代码 int needPrint=0; while(i<n&&strcmp(name,rec[i].name)==0){ if(needPrint==0&&rec[i].state==true)needPrint=1; else if(needPrint==1&&rec[i].state==false)needPrint=2; i++; } if(needPrint<2){ nxtP=i; continue; } printf("%s %02d ",name,rec[nxtP].M); double totalMoney=0; for(int j=nxtP;j<i-1;j++) { if(rec[j].state==true&&rec[j+1].state==false){ int s=rec[j].totalMin,e=rec[j+1].totalMin; int t=s; double money=0; while(t<e){ money+=fare[t%1440]; t++; } printf("%02d:%02d:%02d %02d:%02d:%02d %d $%.2lf " ,rec[j].D,rec[j].h,rec[j].m ,rec[j+1].D,rec[j+1].h,rec[j+1].m ,e-s,money/100); totalMoney+=money; } } printf("Total amount: $%.2lf ",totalMoney/100); nxtP=i; } //getchar(); }