1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
| #include <cstdio> #include <algorithm> #include <cstring> using namespace std; const int maxn=1010; int rates[24]; int n; struct Bill{ char name[21]; int mon,day,h,m; char state[10]; }bills[maxn]; bool cmp(Bill a,Bill b){ if(strcmp(a.name,b.name)!=0) return strcmp(a.name,b.name)<0; else if(a.mon!=b.mon) return a.mon<b.mon; else if(a.day!=b.day) return a.day<b.day; else if(a.h!=b.h) return a.h<b.h; else return a.m<b.m; }
int get_mt(const Bill& a,const Bill& b){ int d,h,m; d=b.day-a.day; h=d*24+b.h-a.h; m=h*60+b.m-a.m; return m; } double get_rate(const Bill& a,const Bill& b){ int sum=0; Bill t=b; if(a.day==b.day&&a.h==b.h){ sum=(b.m-a.m)*rates[b.h]; }else{ sum+=b.m*rates[b.h]; while(true){ t.h--; if(t.h>=0){ sum+=rates[t.h]*60; if(t.h==a.h&&a.day==t.day) break; } else if(t.day>a.day){ t.h=24; t.day--; } } sum-=(a.m*rates[a.h]); } return sum/100.0; } int main(){ for(int i=0;i<24;i++) scanf("%d",&rates[i]); scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%s %d:%d:%d:%d %s",&bills[i].name,&bills[i].mon,&bills[i].day, &bills[i].h,&bills[i].m,&bills[i].state); } sort(bills,bills+n,cmp); char name[21]="xxx"; int mon=-1,cnt=0;
double rate_sum=0.0,rate=0.0; for(int i=0;i<n-1;i++){ int mt_sum=0; if(strcmp(bills[i].name,bills[i+1].name)==0&& bills[i].mon==bills[i+1].mon&& strcmp(bills[i].state,"on-line")==0&& strcmp(bills[i+1].state,"off-line")==0) { if(strcmp(name,bills[i].name)!=0||mon!=bills[i].mon){ strcpy(name,bills[i].name); mon=bills[i].mon; if(cnt!=0){ printf("Total amount: $%.2f\n",rate_sum); rate_sum=0.0; } printf("%s %02d\n",name,mon); cnt++; } mt_sum=get_mt(bills[i],bills[i+1]); rate=get_rate(bills[i],bills[i+1]); rate_sum+=rate; printf("%02d:%02d:%02d %02d:%02d:%02d %d $%.2f\n", bills[i].day,bills[i].h,bills[i].m, bills[i+1].day,bills[i+1].h,bills[i+1].m,mt_sum,rate); i++; } } printf("Total amount: $%.2f\n",rate_sum); return 0; }
|