【PAT甲级】1016 Phone Bills (25 分)(结构体排序)
题意:
输入24个正整数代表从0到23每个小时通话一分钟花费的美分。输入一个正整数N(<=1000),然后输入N组字符串,每个字符串包含客户的名字和通话的时刻以及打出或者挂断的状态。
按照字典序输出用户的名字,(每一段,按行输出)通话时长和花费,以及Total amount。
trick:
对于没打通的用户(没有花费),不要输出它的Total amount。(第1,2数据点答案错误原因)
AAAAAccepted code:
1 #include<bits/stdc++.h> 2 using namespace std; 3 int a[27]; 4 typedef struct users{ 5 string name; 6 int month,day,hour,minute,time; 7 string condition; 8 int flag; 9 }; 10 users user[1007]; 11 bool cmp(users a,users b){ 12 if(a.name!=b.name) 13 return a.name<b.name; 14 else{ 15 if(a.day!=b.day) 16 return a.day<b.day; 17 else if(a.hour!=b.hour) 18 return a.hour<b.hour; 19 else 20 return a.minute<b.minute; 21 } 22 } 23 map<string,double>mp; 24 int main(){ 25 int all=0; 26 for(int i=0;i<24;++i){ 27 cin>>a[i]; 28 all+=a[i]; 29 } 30 int n; 31 cin>>n; 32 for(int i=1;i<=n;++i){ 33 cin>>user[i].name; 34 scanf("%d:%d:%d:%d ",&user[i].month,&user[i].day,&user[i].hour,&user[i].minute); 35 cin>>user[i].condition; 36 if(user[i].condition[1]=='n') 37 user[i].flag=1; 38 } 39 sort(user+1,user+1+n,cmp); 40 string tmp=user[1].name; 41 user[n+1].name="sewage"; 42 for(int i=1;i<=n+1;++i){ 43 if(user[i].name!=tmp&&mp[tmp]) 44 printf("Total amount: $%.2f\n",mp[tmp]); 45 tmp=user[i].name; 46 if(user[i].flag==1&&user[i+1].flag==0&&user[i].name==user[i+1].name){ 47 if(!mp[user[i].name]){ 48 cout<<user[i].name; 49 printf(" %02d\n",user[i].month); 50 } 51 printf("%02d:%02d:%02d %02d:%02d:%02d ",user[i].day,user[i].hour,user[i].minute,user[i+1].day,user[i+1].hour,user[i+1].minute); 52 double sum=0; 53 int mm=0; 54 mm+=60-user[i].minute; 55 sum=1.0*(60-user[i].minute)*a[user[i].hour]; 56 mm+=user[i+1].minute; 57 sum+=1.0*user[i+1].minute*a[user[i+1].hour]; 58 user[i].hour++; 59 for(int j=user[i].hour;j<24;++j) 60 sum+=1.0*a[j]*60,mm+=60; 61 for(int j=0;j<user[i+1].hour;++j) 62 sum+=1.0*a[j]*60,mm+=60; 63 mm+=(user[i+1].day-user[i].day-1)*1440; 64 sum+=1.0*(user[i+1].day-user[i].day-1)*all*60; 65 sum/=100.0; 66 printf("%d $%.2f\n",mm,sum); 67 mp[user[i].name]+=sum; 68 ++i; 69 } 70 } 71 return 0; 72 }
保持热爱 不懈努力
不试试看怎么知道会失败呢(划掉)
世上无难事 只要肯放弃(划掉)