A long-distance telephone company charges its customers by the following rules:

Making a long-distance call costs a certain amount per minute, depending on the time of day when the call is made.  When a customer starts connecting a long-distance call, the time will be recorded, and so will be the time when the customer hangs up the phone.  Every calendar month, a bill is sent to the customer for each minute called (at a rate determined by the time of day).  Your job is to prepare the bills for each month, given a set of phone call records.

Input Specification:

Each input file contains one test case.  Each case has two parts:  the rate structure, and the phone call records.

The rate structure consists of a line with 24 non-negative integers denoting the toll (cents/minute) from 00:00 - 01:00, the toll from 01:00 - 02:00, and so on for each hour in the day.

The next line contains a positive number N (<= 1000), followed by N lines of records.  Each phone call record consists of the name of the customer (string of up to 20 characters without space), the time and date (mm:dd:hh:mm), and the word "on-line" or "off-line".

For each test case, all dates will be within a single month.  Each "on-line" record is paired with the chronologically next record for the same customer provided it is an "off-line" record.  Any "on-line" records that are not paired with an "off-line" record are ignored, as are "off-line" records not paired with an "on-line" record.  It is guaranteed that at least one call is well paired in the input.  You may assume that no two records for the same customer have the same time.  Times are recorded using a 24-hour clock.

Output Specification:

For each test case, you must print a phone bill for each customer.

Bills must be printed in alphabetical order of customers' names.  For each customer, first print in a line the name of the customer and the month of the bill in the format shown by the sample.  Then for each time period of a call, print in one line the beginning and ending time and date (dd:hh:mm), the lasting time (in minute) and the charge of the call.  The calls must be listed in chronological order.  Finally, print the total charge for the month in the format shown by the sample.

Sample Input:

10 10 10 10 10 10 20 20 20 15 15 15 15 15 15 15 20 30 20 15 15 10 10 10
10
CYLL 01:01:06:01 on-line
CYLL 01:28:16:05 off-line
CYJJ 01:01:07:00 off-line
CYLL 01:01:08:03 off-line
CYJJ 01:01:05:59 on-line
aaa 01:01:01:03 on-line
aaa 01:02:00:01 on-line
CYLL 01:28:15:41 on-line
aaa 01:05:02:24 on-line
aaa 01:04:23:59 off-line

Sample Output:

CYJJ 01
01:05:59 01:07:00 61 $12.10
Total amount: $12.10
CYLL 01
01:06:01 01:08:03 122 $24.40
28:15:41 28:16:05 24 $3.85
Total amount: $28.25
aaa 01
02:00:01 04:23:59 4318 $638.80
Total amount: $638.80
// 1016pat.cpp : 定义控制台应用程序的入口点。
// #include <iostream>
#include <vector>
#include <map>
#include <algorithm>
#include <string>
#include <iomanip>
using namespace std; struct Call
{
string name;
int month;
int day;
int hour;
int minute;
int total;
string status;
bool operator<(const Call& rhs) const
{
if(name==rhs.name)
return total<rhs.total;
else
return name<rhs.name;
}
}; map<int,int> toll; int calByTime(int time)
{
int hours=time/;
int minute=time%;
int money=;
int i;
for(i=;i<hours;++i)
money+=toll[i%]*;
money+=minute*toll[i%];
return money;
} double calCost(const Call& s,const Call& t)
{
return (double)(calByTime(t.total)-calByTime(s.total))/100.0;
} int calLast(const Call& s,const Call& t)
{
return (t.day-s.day)**+(t.hour-s.hour)*+(t.minute-s.minute);
} int main()
{
int tmp;
for(int i=;i<;++i)
{
cin>>tmp;
toll[i]=tmp;
}
int n;
cin>>n;
Call call;
vector<Call> all_calls;
vector<Call> format_calls;
char c;
while(n--)
{
cin>>call.name;
cin>>call.month;
cin>>c;
cin>>call.day;
cin>>c;
cin>>call.hour;
cin>>c;
cin>>call.minute;
call.total=**call.day+*call.hour+call.minute;
cin>>call.status;
all_calls.push_back(call);
}
sort(all_calls.begin(),all_calls.end()); //delete the dirty data;
bool hasonline=false;
string curname=" ";
for(vector<Call>::iterator iter=all_calls.begin();iter!=all_calls.end();++iter)
{
if(hasonline==false&&iter->status=="on-line")
{
hasonline=true;
curname=iter->name;
format_calls.push_back(*iter);
}
else if(hasonline==true&&iter->status=="on-line")
{
format_calls.pop_back();
format_calls.push_back(*iter);
curname=iter->name;
}
else if(hasonline==true&&iter->status=="off-line"&&curname==iter->name)
{
format_calls.push_back(*iter);
hasonline=false;
}
}
if((format_calls.end()-)->status=="on-line")
format_calls.pop_back(); //output the result;
curname=" ";
double total=0.0;
double fee;
for(vector<Call>::iterator iter=format_calls.begin();iter!=format_calls.end();++iter,++iter)
{
if(iter->name!=curname)
{
if(curname!=" ")
{
cout<<"Total amount: $"<<fixed<<setprecision()<<total<<endl;
total=0.0;
cout<<iter->name<<" "<<setfill('')<<setw()<<iter->month<<endl;
}
else
{
cout<<iter->name<<" "<<setfill('')<<setw()<<iter->month<<endl;
}
curname=iter->name;
}
cout<<setfill('')<<setw()<<iter->day<<":"<<setfill('')<<setw()<<iter->hour<<":"<<setfill('')<<setw()<<iter->minute<<" ";
cout<<setfill('')<<setw()<<(iter+)->day<<":"<<setfill('')<<setw()<<(iter+)->hour<<":"<<setfill('')<<setw()<<(iter+)->minute<<" ";
cout<<calLast(*iter,*(iter+))<<" ";
fee=calCost(*iter,*(iter+));
cout<<"$"<<fixed<<setprecision()<<fee<<endl;;
total+=fee;
}
cout<<"Total amount: $"<<fixed<<setprecision()<<total<<endl;
return ;
}

PAT 1016. Phone Bills的更多相关文章

  1. PAT 1016 Phone Bills[转载]

    1016 Phone Bills (25)(25 分)提问 A long-distance telephone company charges its customers by the followi ...

  2. PAT 1016 Phone Bills(模拟)

    1016. Phone Bills (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue A long-di ...

  3. PAT甲级1016. Phone Bills

    PAT甲级1016. Phone Bills 题意: 长途电话公司按以下规定向客户收取费用: 长途电话费用每分钟一定数量,具体取决于通话时间.当客户开始连接长途电话时,将记录时间,并且客户挂断电话时也 ...

  4. 1016. Phone Bills (25)——PAT (Advanced Level) Practise

    题目信息: 1016. Phone Bills (25) 时间限制 400 ms 内存限制 32000 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue A l ...

  5. PAT 甲级 1016 Phone Bills (25 分) (结构体排序,模拟题,巧妙算时间,坑点太多,debug了好久)

    1016 Phone Bills (25 分)   A long-distance telephone company charges its customers by the following r ...

  6. PAT 1016

    1016. Phone Bills (25) A long-distance telephone company charges its customers by the following rule ...

  7. 1016 Phone Bills (25 分)

    1016 Phone Bills (25 分) A long-distance telephone company charges its customers by the following rul ...

  8. PAT A 1016. Phone Bills (25)【模拟】

    题目:https://www.patest.cn/contests/pat-a-practise/1016 思路:用结构体存储,按照名字和日期排序,然后先判断是否有效,然后输出,时间加减直接暴力即可 ...

  9. PAT (Advanced Level) 1016. Phone Bills (25)

    简单模拟题. #include<iostream> #include<cstring> #include<cmath> #include<algorithm& ...

随机推荐

  1. 实现目标文件与源码分开的makefile测试实验

    uboot提供了两种编译策略,即可以将生成的目标文件与源码混在一起,也可以将生成的目标文件与源码分开.通过对uboot Makefile的分析,笔者编写了一个简单的实现这种功能的Makfile. 顶层 ...

  2. WebApi学习总结系列第二篇(webapi的调试)

    目前使用webapi的调试主要有 1.用接口宿主调试.(宿主形式多样:web.winform.还有就是直接用app进行接口调试) 2.用Fiddler抓Http信息,进行调试. 1.用接口宿主调试. ...

  3. Net Core Docker

    Net Core Docker轻量级的web框架   .net core现在已经有了大的发展,虽然笔者现在已经从事python开发,但是一直在关注.net的发展,在逛博客园的时候,发现有大家都会提到N ...

  4. Spring MVC 环境搭建(maven+SpringMVC+mybatis+Freemarker)

    Spring MVC 环境搭建(maven+SpringMVC+mybatis+Freemarker) 一.准备工作 1.Eclipse Java EE IDE(4.4.1) 2.JDK 3.Tomc ...

  5. Ajax编程相对路径与绝对路径

    http://www.worlduc.com/blog2012.aspx?bid=16946309 ajax同一域名调用采用相对路径 var url = 'QuerySingleDataByField ...

  6. 测来测去,感觉REQUESTS最实在

    URLLIB,URLLIB2,PYCURL,HTTPIE,,,在测试PUT及认证时,还是REQUESTS胜出.. 测试过程及样例代码如下: import urllib import urllib2 i ...

  7. ANDROID_MARS学习笔记_S03_003_LocationManager、LocationListener

    一.简介 二.代码1.xml (1)AndroidManifest.xml 增加 <uses-permission android:name="android.permission.A ...

  8. 剖析Qt的事件机制原理

    版权声明 请尊重原创作品.转载请保持文章完整性,并以超链接形式注明原始作者“tingsking18”和主站点地址,方便其他朋友提问和指正. QT源码解析(一) QT创建窗口程序.消息循环和WinMai ...

  9. 控件构造函数需要的AOwner是TComponent,而不是Parent

    普通控件都只有一个构造函数,但是这个构造函数却强迫指定AOwner,也就是说,VCL希望将所有控件(至少是所有可视化控件)全部置于它的管理之下.至于到底显示不显示,那是另一个层次的问题.这个问题其实挺 ...

  10. android studio 偶记

    修改项目名称 如果仅仅改了文件夹的名字,则会出现引用问题,相应的如下文件都要做相应的修改: 1. package name 要做相应调整 2. settings.gradle ,中要修改相应的moda ...