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 ...
随机推荐
- 微服务深入浅出(5)-- 声明式调用Feign
Feign的使用 Feign采用了声明式的API接口的风格,将Java Http客户端绑定到它的内部,从而调用过程变的简单. 配置文件: spring: application: name: eure ...
- 爬虫笔记之JS检测浏览器开发者工具是否打开
在某些情况下我们需要检测当前用户是否打开了浏览器开发者工具,比如前端爬虫检测,如果检测到用户打开了控制台就认为是潜在的爬虫用户,再通过其它策略对其进行处理.本篇文章主要讲述几种前端JS检测开发者工具是 ...
- 信息安全学习笔记--CSRF
一.CSRF简介 CSRF(Cross-site request forgery)跨站请求伪造,也被称为“one click attack”或者“session riding”,通常缩写为CS ...
- JDOM生成XML文档的一般方法
由于DOM提供的生成XML的方法不够直观,而且要用到各种繁琐的注解,鉴于此可借助第三方库-----JDOM生成XML文档.具体操作方式如下: import java.io.FileOutputStre ...
- ORACLE表空间查询和管理【转】
红色是自由指定的~~--查询表空间SELECT D.TABLESPACE_NAME, SPACE "SUM_SPACE(M)", SPACE - NVL(F ...
- 洛谷P1186玛丽卡
传送门啦 先跑一遍最短路,将最短路的路径记录下来,然后枚举每一条最短路的边,将其断掉,记录此时的1-n的时间,取其中最大的一个时间即为所求. (通过 $ cut[][] $ 和 $ f[] $ 进行操 ...
- R语言学习笔记:使用reshape2包实现整合与重构
R语言中提供了许多用来整合和重塑数据的强大方法. 整合 aggregate 重塑 reshape 在整合数据时,往往将多组观测值替换为根据这些观测计算的描述统计量. 在重塑数据时,则会通过修改数据的结 ...
- 利用Requests库写爬虫
基本Get请求: #-*- coding:utf-8 -*- import requests url = 'http://www.baidu.com' r = requests.get(url) pr ...
- SQL之PROCEDURE(存储过程)
先来看一小段代码 create procedure pr_bank(@bank_id int) as BEGIN select *from bank where bank_ID = @bank_id ...
- PostgreSQL数据库如果不存在则插入,存在则更新
INSERT INTO UM_CUSTOMER(customercode,CompanyFlag,InputTime,LocalVersion) ) ON conflict(customercode) ...