1016 Phone Bills (25)(25 point(s))
problem
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
tip
- 考察对STL库的熟悉情况的模拟题。
answer
#include<bits/stdc++.h>
using namespace std;
#define Max 1010
#define INF 0x3f3f3f3f
#define fi first
#define se second
int rate[25], N;
typedef struct {
float bill;
int minutes;
string begin, end;
}Call;
typedef struct{
string time, tip, name;
}Time;
typedef struct {
vector<Time> temp;
vector<Call> calls;
float sum;
}Data;
Data D[1010];
map<string, Data> M;
map<string, Data>::iterator IT;
int month[12] = {0, 31};
bool OnOff(string tip){
return tip.size() == 7 ? true : false;
}
int TranTime(string t) {
int day, hour, minute;
day = (t[3]-'0')*10 + t[4]-'0';
hour = (t[6]-'0')*10 + t[7]-'0';
minute = (t[9]-'0')*10 + t[10] -'0';
return (day-1)*24*60 + hour*60 + minute;
}
float CalBill(string t){
int oneDay = 0;
int sum = 0;
for(int i = 0; i < 24; i++){
oneDay += rate[i]*60;
}
int day, hour, minute;
day = (t[3]-'0')*10 + t[4]-'0';
hour = (t[6]-'0')*10 + t[7]-'0';
minute = (t[9]-'0')*10 + t[10] -'0';
sum += day*oneDay;
for(int i = 0; i < hour; i++)
{
sum += rate[i]*60;
}
sum += rate[hour]*minute;
return (float)sum/100.0;
}
bool Comp(Time a, Time b){
return a.time < b.time;
}
int main (){
// freopen("test.txt", "r", stdin);
ios::sync_with_stdio(false);
for(int i = 0; i < 24; i++){
cin>>rate[i];
}
cin>>N;
for(int i = 0; i < N; i++) {
string name, time, tip;
cin>>name>>time>>tip;
Time t;
t.name = name;
t.time = time;
t.tip = tip;
M[t.name].temp.push_back(t);
}
for(IT = M.begin(); IT != M.end(); IT++){
sort(IT->second.temp.begin(), IT->second.temp.end(), Comp);
vector<Time> a = IT->se.temp;
stack <Time> sta;
Call call;
// cout<<IT->first<<" "<< a[0].time.substr(0,2)<<endl;
for(int i = 0; i < IT->se.temp.size(); i++){
if(OnOff(a[i].tip)){
sta.push(a[i]);
}else{
if(sta.empty()) continue;
call.begin = sta.top().time;
call.end = a[i].time;
call.minutes = TranTime(call.end) - TranTime(call.begin);
call.bill = CalBill(call.end) - CalBill(call.begin);
// cout<<call.begin.substr(3,10)<<" "<<call.end.substr(3, 10)<<" "<<call.minutes<<" $"<<fixed<<setprecision(2)<<call.bill<<endl;
IT->se.calls.push_back(call);
IT->second.sum += call.bill;
while(!sta.empty()) sta.pop();
}
}
// cout<<"Total amount: $"<<fixed<<setprecision(2)<<IT->se.sum<<endl;
}
for(IT = M.begin(); IT != M.end(); IT++){
vector<Time> a = IT->se.temp;
if(IT->se.calls.size() == 0) continue;
cout<<IT->first<<" "<< a[0].time.substr(0,2)<<endl;
for(int i = 0; i < IT->se.calls.size(); i++){
Call call = IT->se.calls[i];
cout<<call.begin.substr(3,10)<<" "<<call.end.substr(3, 10)<<" "<<call.minutes<<" $"<<fixed<<setprecision(2)<<call.bill<<endl;
}
cout<<"Total amount: $"<<fixed<<setprecision(2)<<IT->se.sum<<endl;
}
return 0;
}
exprience
- 模拟题,小心配对错误,与无配对的情况。即是边界条件的考虑。
1016 Phone Bills (25)(25 point(s))的更多相关文章
- A1016 Phone Bills (25)(25 分)
A1016 Phone Bills (25)(25 分) A long-distance telephone company charges its customers by the followin ...
- MySQL5.7.25(解压版)Windows下详细的安装过程
大家好,我是浅墨竹染,以下是MySQL5.7.25(解压版)Windows下详细的安装过程 1.首先下载MySQL 推荐去官网上下载MySQL,如果不想找,那么下面就是: Windows32位地址:点 ...
- PAT 甲级 1006 Sign In and Sign Out (25)(25 分)
1006 Sign In and Sign Out (25)(25 分) At the beginning of every day, the first person who signs in th ...
- 【PAT】1020 Tree Traversals (25)(25 分)
1020 Tree Traversals (25)(25 分) Suppose that all the keys in a binary tree are distinct positive int ...
- 【PAT】1052 Linked List Sorting (25)(25 分)
1052 Linked List Sorting (25)(25 分) A linked list consists of a series of structures, which are not ...
- 【PAT】1060 Are They Equal (25)(25 分)
1060 Are They Equal (25)(25 分) If a machine can save only 3 significant digits, the float numbers 12 ...
- 【PAT】1032 Sharing (25)(25 分)
1032 Sharing (25)(25 分) To store English words, one method is to use linked lists and store a word l ...
- 【PAT】1015 德才论 (25)(25 分)
1015 德才论 (25)(25 分) 宋代史学家司马光在<资治通鉴>中有一段著名的“德才论”:“是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之小人.凡取人之术,苟不得 ...
- 1003 Emergency (25)(25 point(s))
problem 1003 Emergency (25)(25 point(s)) As an emergency rescue team leader of a city, you are given ...
- 1002 A+B for Polynomials (25)(25 point(s))
problem 1002 A+B for Polynomials (25)(25 point(s)) This time, you are supposed to find A+B where A a ...
随机推荐
- Linux服务-nginx+nfs实现共享存储
任务目标:一台服务器进行更改,其他两台服务器访问均同步 现在的情况是: web1.html文件访问的结果是web1 现在我在Web1这台机器上更改web1.html,内容为change in web1 ...
- vue组件间通信
组件间通信(父子,兄弟) 相关链接\组件通信http://www.cnblogs.com/xulei1992/p/6121974.html 学习链接Vue.js--60分钟快速入门http://www ...
- CSS 特殊性、继承与层叠
一.特殊性规则 选择器的特殊性由选择器本身的组件确定:特殊性由四个部分组成,其初始值为0,0,0,0. 1. 对于选择器中的每一个id,记0,1,0,0: 2. 对于选择器中的每一个类.伪 ...
- 20165230 2017-2018-2 《Java程序设计》第5周学习总结
20165230 2017-2018-2 <Java程序设计>第5周学习总结 教材学习内容总结 第七章 内部类与异常类 内部类与外嵌类 可以在类中定义另一个类,即内部类 包含内部类的类为内 ...
- JavaScript入门--慕课网学习笔记
JAVASCRIPT—(慕课网)入门篇 我们来看看如何写入JS代码?你只需一步操作,使用<script>标签在HTML网页中插入JavaScript代码.注意, <script&g ...
- 读sru代码
1. def read_corpus(path, eos="</s>"): data = [ ] with open(path) as fin: for line in ...
- [how to]HBase Snapshots原理与使用
1.简介 Snapshots即快照的意思,作用于表上.在对于表做快照的时候不会造成文件的拷贝,如不会对HFile文件进行拷贝而是以链接的方式链接到元表的HFile上.可以说它是一种元数据的集合,可以快 ...
- Bootstrap FileInput 多图上传插件 文档属性说明
Bootstrap FileInput 多图上传插件 原文链接:http://blog.csdn.net/misterwho/article/details/72886248?utm_source ...
- 安卓ios各版本及分辨率占比
Google Play 安装统计数据 只有安卓的 https://developer.android.com/about/dashboards/index.html?hl=zh-cn 腾讯移动分析 安 ...
- Elasticsearch: 权威指南---基础入门
1.查看方式:GETURL:http://10.10.6.225:9200/?pretty pretty 在任意的查询字符串中增加pretty参数.会让Elasticsearch美化输出JSON结果以 ...