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. php5.3 不支持 session_register() 此函数已启用的解决方法

    php从5.2.x升级到5.3.2.出来问题了.有些原来能用的程序报错了,Deprecated: Function session_register() is deprecated php从5.2.x ...

  2. delphi发送html带附件邮件

    var html: TIdText; begin if not SMTP.Connected then SMTP.Disconnect(); try SMTP.Connect; try if SMTP ...

  3. JBPM4中常用概念总结

    1. 流程定义(Process Definition)    流程定义是记录在xml文件中的对流程的描述,它包含唯一的流程开始节点和多个流程功能节点,每个节点之间使用transition进行连接. P ...

  4. Web模板引擎本质前奏

    执行字符串表示的函数,并为该函数提供全局变量: #! /usr/bin/env python3 namespace = {'name': 'zingp', 'data': [16, 19, 25]} ...

  5. gulp解决RequireJS

    gulp解决RequireJS项目前端缓存问题(二)   前言 这一节,我们主要解决在上一节<使用gulp解决RequireJSs项目前端缓存问题(一)>末尾提到的几个问题: 对通过req ...

  6. CSS3 calc() 会计算的属性

    calc是英文单词calculate(计算)的缩写,是css3的一个新增的功能,你可以使用calc()给元素的border.margin.pading.font-size和width等属性设置动态值. ...

  7. POJ 2992 Divisors

    每个数都可以分解成素数的乘积: 写成指数形式:n=p1^e1*p2^e2*...*pn^en:(p都是素数) 那么n的因数的数量m=(e1+1)*(e2+1)*...*(en+1): 所以用筛选法筛出 ...

  8. 【2011 Greater New York Regional 】Problem H: Maximum in the Cycle of 1

    也是一个数学题: 主要用到的是排列组合的知识,推推公式就行了,挺简单的: 唯一要注意的是A(0,0)=1: 在这个上面WA了几次,= = 代码: #include<stdio.h> #de ...

  9. perl 初始化Hash

    Vsftp:/root/perl/6# cat a5.pl use Data::Dumper; my @arr=qw/a bc d /; my %rec=(); for $field (@arr){ ...

  10. NOI2005维护数列

    1500: [NOI2005]维修数列 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 6263  Solved: 1879[Submit][Status ...