#include <iostream>
#include <bits/stdc++.h>
using namespace std;
double timm[24];
struct per{
string name;
int d,h,m,M;
string state;
}p[1010];
bool comp(per &a,per &b){
if(a.name==b.name){
if(a.d==b.d){
if(a.h==b.h){
return a.m<b.m;
}else{
return a.h<b.h;
}
}else{
return a.d<b.d;
}
}else{
return a.name<b.name;
}
}
int main()
{
double h_money=0;//每天/元
for(int i=0;i<24;i++){
cin>>timm[i];//这是每分钟的钱,单位为分
timm[i]*=0.01;
h_money+=timm[i];
}
h_money*=60;
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>p[i].name;
string t;
cin>>t;
p[i].M=(t[0]-'0')*10+(t[1]-'0');
p[i].d=(t[3]-'0')*10+(t[4]-'0');
p[i].h=(t[6]-'0')*10+(t[7]-'0');
p[i].m=(t[9]-'0')*10+(t[10]-'0');
cin>>p[i].state;
}
sort(p,p+n,comp);
/*for(int i=0;i<n;i++){
cout<<p[i].name;
printf(" %02d:%02d:%02d:%02d",p[i].M,p[i].d,p[i].h,p[i].m);
cout<<p[i].state<<endl;
}*/
//这是第一种方法,用一个flag来判断某位person是否有匹配
int flag=0;//0表示没有输出过
per start;
start.name=p[0].name;
start.M=p[0].M;
start.d=p[0].d;
start.h=p[0].h;
start.m=p[0].m;
start.state=p[0].state;
double total=0;
for(int i=1;i<n;i++){
if(p[i].name!=start.name){
if(flag){
//结算前一个人的
printf("Total amount: $%.2f\n",total);
total=0.0;
flag=0;
}
}else{
if(start.state=="on-line"&&p[i].state=="off-line"){
//计算时间
int t_day=(p[i].d-start.d)*24*60;
int t_h=(p[i].h-start.h)*60;
int t_m=(p[i].m-start.m);
//计算bill
//计算天数
double money=0.0;
money+=(p[i].d-start.d)*h_money;
//计算小时
if(p[i].h>start.h){
//不能这么干,应为不同的i,timm不同
//money+=(p[i].m-start.m)*timm[i]*60;
//只能用循环
for(int j=start.h;j<p[i].h;j++){
money+=timm[j]*60;
}
}else{
for(int j=p[i].h;j<start.h;j++){
money-=timm[j]*60;
}
}
//分钟
money-=start.m*timm[start.h];
money+=p[i].m*timm[p[i].h];
//没有被匹配过
if(flag==0){
cout<<p[i].name;
printf(" %02d\n",p[i].M);
flag=1;
}
printf("%02d:%02d:%02d %02d:%02d:%02d ",start.d,start.h,start.m,p[i].d,p[i].h,p[i].m);
printf("%d $%.2f\n",t_day+t_h+t_m,money);
total+=money;
}
}
start.name=p[i].name;
start.M=p[i].M;
start.d=p[i].d;
start.h=p[i].h;
start.m=p[i].m;
start.state=p[i].state;
}
if(flag){
//这里如果是lf,结果会是0
printf("Total amount: $%.2f\n",total);
}
return 0;
}
【PAT】1016 Phone Bills (25 分)
最新推荐文章于 2023-05-06 22:13:41 发布