#include <iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<map>
#include<string>
#include<vector>
using namespace std;
const int maxn=1010;
int toll[24];
int n;
struct record
{
string name;
int m;
int d;
int h;
int min;
int flag;//标记是打电话还是挂电话
} c[maxn];
vector<record>cus[maxn];//每个人的有效通话记录
map<string,int>mp;
bool cmp(record a,record b)
{
if(a.name!=b.name)return a.name<b.name;//先按照姓名再按照电话发生的时间进行排队
else if(a.m!=b.m)return a.m<b.m;
else if(a.d!=b.d)return a.d<b.d;
else if(a.h!=b.h)return a.h<b.h;
else return a.min<b.min;
}
int cost(int d1,int h1,int min1,int d2,int h2,int min2,int &fen)//两个时间间隔和之间的话费
{
int ans=0;
fen=0;
while(d1<d2||h1<h2||min1<min2)
{
ans++;
min1++;
fen+=toll[h1]*1;
if(min1==60)
{
min1=0;
h1++;
}
if(h1==24)
{
h1=0;
d1++;
}
}
return ans;
}
int main()
{
// freopen("d://jin.txt","r",stdin);
for(int i=0; i<24; i++)
cin>>toll[i];
cin>>n;
for(int i=0; i<n; i++)
{
string name;
cin>>c[i].name;
scanf("%d:%d:%d:%d",&c[i].m,&c[i].d,&c[i].h,&c[i].min);
string s;
cin>>s;
if(s=="on-line")
{
on++;
c[i].flag=0;
}
else c[i].flag=1;
}
sort(c,c+n,cmp);
int people=1;//总共有几个有有效通话记录的人,从1开始
for(int i=0; i<n; i++)
{
if(c[i].name==c[i+1].name&&c[i].flag==0&&c[i+1].flag==1)//一对有效的通话记录
{if(mp[c[i].name]==0){mp[c[i].name]=people;people++;}//给名字做hash对应一个cus
cus[mp[c[i].name]].push_back(c[i]);
cus[mp[c[i].name]].push_back(c[i+1]);
}
}
for(int i=1; i<people; i++)
{
int ans=0;int fen=0;
cout<<cus[i][0].name<<' ';
printf("%02d\n",cus[i][0].m);
for(int j=0; j<cus[i].size()-1; j++)
if(cus[i][j].flag==0&&cus[i][j+1].flag==1)
{
printf("%02d:%02d:%02d %02d:%02d:%02d ",cus[i][j].d,cus[i][j].h,cus[i][j].min,cus[i][j+1].d,cus[i][j+1].h,cus[i][j+1].min);
cout<<cost(cus[i][j].d,cus[i][j].h,cus[i][j].min,cus[i][j+1].d,cus[i][j+1].h,cus[i][j+1].min,fen)<<' ';
cout<<'$';
printf("%.2f\n",fen/100.0);
ans+=fen;
}
cout<<"Total amount: $";
printf("%.2f\n",ans/100.0);
}return 0;
}
Phone Bills
最新推荐文章于 2022-07-09 12:10:02 发布