[PAT甲级]1016. Phone Bills (25)(统计用户每月电话账单)

软件测试python版本‘电话账单’题解 题目:对电话账单来说,春季和秋季的标准时间与夏时制时间的转换会带来有意思的问题。春 季,这种转换发生在(3 月末,4 月初的)星期日凌晨 2:00 时,这时时钟要设置为凌晨 3:00 时。对称的转换通常发生在 10 月最后一个星期日,时钟要从 2:59:59 调回到 2:00:00。 请为采用以下费率计算用户的每月通话费: (1)通话时间<=20 分钟时,每分钟收费 0.05 美元,通话时间不到 1 分钟时按 1 分钟 计算。 (2)通话时间>20 分钟时,收费 1.00 美元,外加每分钟 0.10 美元,超过 20 分钟的部 分,不到 1 分钟时按 1 分钟计算。 假设: (1)通话计费时 立即下载

1016. Phone Bills (25)

原题链接
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

题目大意:

  • 给出电话公司一个月的通话流水记录,统计各个用户每月的电话账单
  • 第一行给出每天每小时不同的收费, 按 分钟/美分 收费
  • 随后给出n行通话记录,客户名字name,时间mm:dd:hh:mm(月:日:时:分), 状态(接通时间on-line 挂断时间off-line)
  • 通话流水记录并不是全部都是有效的,每个人每段通话的on-line对应最近的off-line,多余的都是无效的
  • 最后按照要求输出每个人的月有效通话记录及其费用(按照美元计算,保留两位小数,1美元=100美分)

思路:

  • 做这道题完全参考了别人的想法,附上链接
  • 定义结构体,统计每条通话记录,其中time计算该通话时间距离每月1号凌晨的时间差,按照分钟计算,方便排序,同时避免计算跨天通话费用的麻烦
  • 先将给出的通话记录按照用户名字的先后顺序,用户时间的先后顺序排序
  • 然后筛选出有效的通话记录,map统计,每个用户对应一个数组,该数组记录其通话记录
  • 最后统计输出
  • 附上另一个链接,代码风格很棒

代码:

#include <iostream>
#include <vector>
#include <algorithm>
#include <map>
#include <cstdio>
using namespace std;
int rate[25];//通话 每分钟/美分
struct node{
    string name;//客户名字
    int month,day,hour,minute;//通话时间
    int time;//从01:00:00到当前的通话时长 方便排序 同时避免计算跨天通话费用的麻烦
    string status;//通话状态 接通on-line 挂断off-line
};
int cmp(node a, node b){
    return a.name!=b.name ? a.name<b.name : a.time<b.time;
}
double bill(node a, int *rate){
    double res = rate[24]*60*(a.day-1);
    for(int i=0; i<a.hour; i++)
        res += rate[i]*60;
    res += rate[a.hour]*a.minute;
    return res/100;//题目返回美元 计费则是每分钟/美分 所以除以100
}
int main()
{
    for(int i=0; i<24; i++){
        scanf("%d", &rate[i]);
        rate[24] += rate[i];
    }
    int n;
    scanf("%d", &n);
    vector<node> data(n);
    for(int i=0; i<n; i++){
        cin >> data[i].name;
        scanf("%d:%d:%d:%d", &data[i].month, &data[i].day, &data[i].hour, &data[i].minute);
        cin >> data[i].status;
        data[i].time = (data[i].day-1)*24*60 + data[i].hour*60 + data[i].minute;//从01:00:00到当前的通话时长
    }
    sort(data.begin(), data.end(), cmp);
    map<string, vector<node>> effective;//有效的通话记录 一人对应一个数组
    for(int i=1; i<n; i++){//筛选有效通话记录
        if(data[i].name==data[i-1].name && data[i-1].status=="on-line" && data[i].status=="off-line"){
            effective[data[i].name].push_back(data[i-1]);
            effective[data[i].name].push_back(data[i]);
        }
    }
    for(auto eff : effective){
        vector<node> temp = eff.second;//用户有效通话记录数组
        cout << eff.first;//输出用户名字
        printf(" %02d\n", temp[0].month);
        double total = 0.0;//总的通话费用
        for(int i=1; i<temp.size(); i+=2){
            double t = bill(temp[i], rate) - bill(temp[i-1], rate);//每段通话的费用
            printf("%02d:%02d:%02d %02d:%02d:%02d %d $%.2f\n", temp[i-1].day, temp[i-1].hour, temp[i-1].minute, temp[i].day, temp[i].hour, temp[i].minute, temp[i].time-temp[i-1].time, t);
            total += t;
        }
        printf("Total amount: $%.2f\n", total);
    }
    return 0;
}
Orcad 17.2导出PDF原理图终极指南:从Ghostscript安装到带属性书签配置 本文是Orcad 17.2导出高质量PDF原理图的终极指南。针对导出过程中常见的Ghostscript安装报错、软件卡死及版本兼容性问题,提供了详细的解决方案。重点推荐使用Ghostscript 9.53.3版本以确保最佳兼容性,并深入讲解了从安装配置、内存优化到高级书签属性设置的完整流程,帮助硬件工程师稳定、高效地生成带完整器件属性和导航书签的PDF文档。 阅读详情

相关推荐

OpenClaw 聪明设置指南(真实可用方案)

本文介绍了OpenClaw AI系统的配置与优化指南,主要内容包括:1)基础配置,涵盖初始化流程、安全设置和配置文件位置;2)模型分层策略,推荐主力模型与降级方案;3)性能优化,包括推理加速和内存管理;4)智能提升方法,如人格定义和技能安装;5)高级功能如多Agent协同和Token优化。文章提供了详细的配置命令和参数说明,帮助用户根据需求平衡性能与成本,实现高效AI助手部署。

qq_43344878的博客 711

Pat【甲级】 1016 Phone Bills 电话账单(附中文题目) 模拟

文章目录Phone Bills (25分)思路数据存储实现代码运行结果 Phone Bills (25分) 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

Jacksqh的博客 962

Mathtype公式下标深度调整技巧:解决固定行距下的显示不全问题

本文针对在Word等文档中设置固定行距时,Mathtype公式下标显示不全的问题,提供了专业解决方案。核心在于调整Mathtype软件内部的“下标深度”参数,通过修改单个公式或批量格式化全文,使公式完美适配固定行距,确保下标清晰完整,且不影响文档整体排版。

pepsi的博客 1503

Phone Bills

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. Wh

sheng_xc的专栏 831

[EdgeAI] NXP eIQ 机器学习Toolkit (二):模型篇

eIQ™机器学习(ML)软件开发环境支持在恩智浦EdgeVerse™微控制器和微处理器(包括i.MX RT跨界MCU和i.MX系列应用处理器)上使用ML算法。eIQ ML软件包括称为eIQ Toolkit的ML工作流工具以及推理引擎、神经网络编译器和优化库。......

HowieXue 薛永浩的博客 1万+

手把手教你学Simulink--基于Simulink的开关磁阻电机电流斩波控制仿真建模

特点:定子和转子均由普通硅钢片叠压而成,没有永磁体或绕组在转子上。工作原理:利用转子旋转时不同位置的磁阻变化产生转矩。控制挑战:由于SRM的高度非线性和磁饱和效应,需要复杂的控制算法来优化性能。利用Simscape Electrical中的模块构建SRM的物理模型,配置参数如电阻、电感等。matlab深色版本% 添加SRM电机模块根据实际需求调整电机参数。通过上述步骤,我们简要介绍了如何基于Simulink进行开关磁阻电机的电流斩波控制仿真建模。

MHD0815的博客 306

PAT甲级真题1016 电话账单(简单易懂和巧妙处理两种办法)

长途电话公司按以下规则向客户收费: 拨打长途电话每分钟要花费一定的费用,具体收费取决于拨打电话的时间。 客户开始拨打长途电话的时间将被记录,客户挂断电话的时间也将被记录。 每个月都要给客户发送一次话费账单,账单中应包含每次通话记录以及相关收费等信息。 给定一组电话记录,你的工作是为客户准备帐单。 输入格式 输入包含两部分:费率结构和电话记录。 费率结构由一行组成,该行包含24个非负整数,分别表示从 00:00-01:00 的收费(分/分钟),从 01:00-02:00 的收费,以此类推… 下一行包含一个正整

qq_43738331的博客 562

Plecs standalone 4.9.5最新版本,赶紧来下载使用吧,需要做并网逆变器及光伏储能变换器的朋友赶紧下载起来

PLECS 4.9.5较4.7.1版实现全面升级:采用自适应求解器切换技术,支持多核CPU/GPU加速,仿真速度提升30-50%;新增模型引用功能,实现模块化设计;强化光伏/风电等新能源组件,支持多物理场耦合分析;优化代码生成功能,兼容多种硬件平台和FMU导入。新版特别适用于复杂电力电子系统、多域联合仿真及硬件在环测试项目,但对硬件配置要求更高。基础教学项目仍可使用4.7.1版本。建议用户根据项目复杂度选择升级方案。

2448

大数据项目之通话记录统计

启动kafka kafka-server-start /usr/local/etc/kafka/server.properties 启动flume来收集日志并发送到kafka flume-ng agent -c conf/ -n a1 -f conf/flume-2-kafka.conf flume-2-kafka.conf文件内容如下 a1.sources = r1 a1.channels = c1 a1.sinks = k1 a1.sources.r1.type = exec a1.sources.r

shuangyueliao的专栏 3441

深入详细分析Skyworks 78113 PAMiD射频方案图

是一种高集成度的射频前端模块,它结合了功率放大器(PA)、双工器(Duplexer)、滤波器和开关等多个组件,主要用于4G LTE移动通信系统中的射频前端链路。是一款典型的PAMiD模块,通过将多个频段的发射(TX)和接收(RX)路径集成在一个模块中,大大减少了传统射频设计中的分立器件,同时提高了信号链路的效率和可靠性。模块化设计的优势PCB空间优化:高集成度设计大幅减小了射频电路的尺寸,适用于紧凑型移动设备。减少设计复杂度:模块化设计减少了器件间的匹配与调试工作,加速产品开发周期。性能稳定性。

weixin_43199439的博客 1481

AI驱动的客户终身价值分析:深入理解公司的收入质量

客户终身价值(Customer Lifetime Value, CLV)是衡量客户在整个生命周期内能为企业带来多少利润的重要指标。传统的CLV计算方法往往过于简化,无法准确反映复杂的客户行为和收入模式。本文旨在介绍如何利用人工智能技术,特别是机器学习方法,构建更精确的CLV预测模型,从而帮助企业深入理解其收入质量。CLV的基本概念和商业意义传统CLV计算方法的局限性基于机器学习的CLV预测方法特征工程和模型选择策略实际应用案例和Python实现首先介绍CLV的基本概念和商业背景。

AI云原生与云计算技术学院 477

A1016 PAT甲级JAVA/C++题解 Phone Bills

寻找相邻的接通和挂断记录配对,达成一对则统计一次时间并计算花费。对所有记录按照姓名,月,日,时,分排序。读取姓名,月日时分,接通,挂断状态。统计电话的分钟和消费金额。输入的第一行是每小时价格。统计每个用户总花费并输出。java存在两个测试点的运行超时问题。

qq_49695680的博客 709

OpenStack ussuri 私有云平台搭建企业级实战

openstack是一个云操作系统,这个操作系统控制着数据中心中的计算,存储和网络资源。所有这些资源的管理都是通过API来来实现的,并且管理资源都有相应的认证机制。在openstack中有一个叫做dashboard的仪表盘,这个仪表盘通过web界面可以管理这些在DC中的资源。除了能提供IaaS功能外,你还可以使用orchestration,错误管理和服务管理等服务来确保应用的高可用性。

悦分享 2340

【PAT 甲级】1016 Phone Bills

1016 Phone Bills

AmiaYukiAchami的博客 393

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

PAT甲级 1016 Phone Bills (25分)

1016 Phone Bills (25分) 题目链接:PAT A 1016 思路分析:这道题有难度。题目需要输出一张电话列表,输出的顺序是按照字母序升序输出的。首先题目保证所有通话的月份都是一样的,给出了不同时间段的费用(x美分/每分钟),online表示通话开始,offline表示通话结束。由于题目的输入是乱序的,所以很明显,需要用结构体来存储输入信息。结构体中的state如果为1代表on...

weixin_43684054的博客 197

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

PAT甲级 1016 Phone Bills

PAT甲级 1016 Phone Bills解题思路

uchiha_rin的博客 255

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

1016 Phone Bills (25 分)--PAT甲级(模拟)

PAT甲级、模拟

WananRd 131

PAT (Advanced Level) 1016 Phone Bills(恶心模拟)

题目链接:点击查看 题目大意:模拟电话收费规则: 每个时间段的收费不同,时间段分为:00:00-01:00,01:00-02:00诸如此类 最开始给出的单价是每分钟的单价 最后输出每个用户的电话费 题目分析:甲级的题目我就没读明白过,加上漏掉了好多细节,导致前期白费功夫: 题目保证给出相同的月份 电话费为0的人不需要输出 初始时给出的单价是美分,题目要求输出的答案是美元,100美分=...

Falcon的博客 567

浙大PAT 甲级A1016 Phone Bills(排序、数据记录配对)

PAT - A1016 Phone Bills (25 分) https://pintia.cn/problem-sets/994805342720868352/problems/994805493648703488 大致思路: 按 客户名字、时间 将输入的通话记录数据排序,找匹配的通话记录(关键点),输出并统计时长和费用。 注意点: 无匹配记录的客户 什么也不能输出。 两条通话记录匹配条件: ①相邻 ; ②属于同一个客户(自己栽在这里…代码后附测试数据); ③前一个为on-line后一个为off-li

yuanyb 的博客 237

统计通话次数和时间的软件_通话时间统计官方版

通话时间统计是一款手机管理工具,帮助大家在线进行通话管理,你可以将自己所有的通话时间全部记录下来。应用简介:用途:本程序用于通话记录时间、时长、周几、日期、农历等显示,并有分号、分段统计等参考.特别适用于一些无通话时长记录的定制机和想要星期、农历的朋友。想知道最近你跟某人通了多长时间电话吗?或者想看看近期哪个家伙骚扰电话最多?“通话时间统计”来帮你.软件权限:程序正常运行需要“电话、通讯录、网络、...

weixin_39770416的博客 4287

Flink练习之通话时长的统计

Flink的练习之电话通信统计 环境介绍 1. 软件 flink版本:flink-1.9.1-bin-scala_2.11.tgz 官网下载 kafka版本:kafka_2.11-2.3.1.tgz 官网下载 zookeeper版本:3.4.14 mysql版本:8.0.18 操作系统:windows 8.1 redis 开发工具idea 本文将实现一个电话消费的统计。具体业务描述:使用j...

FBB360JAVA的博客 6315

小米应用使用时间统计_通话时间统计

应用介绍本程序用于通话记录时间、时长、周几、农历等显示及长存,并有按号、按名搜索、分时、分号统计、通话备注、标级等功能。想知道最近你跟某人通了多长时间电话吗?或者想看看近期哪个家伙骚扰电话最多?“通话时间统计”来帮您。还有您手机系统默认的通话记录是不是只能保存有限的几百条?看看更早的记录是不是消失了?本APP也可长久保存过往通话记录。另外也特别适用于一些无通话时长记录的定制机。权限与隐私:程序正常...

weixin_39978863的博客 2679

1016 Phone Bills (25 分)

问题描述:给定每天每个时段的通话费用和每个人的打挂电话的记录,输出每个人的总费用和通话记录。 解题思路:用map将每个人与自己的通话记录关联起来,再对记录排序,计算费用,输出。计算费用,采用累积的方法,T1--T2的费用相当于从0-&gt;T2的费用减去0-&gt;T1的费用。 AC代码: #include&lt;iostream&gt; #include&lt;algorithm&gt;...

lianwaiyuwusheng的博客 703

POJ1016-Numbers That Count

全解题报告索引目录 -> 【北大ACM – POJ试题分类】 转载请注明出处:http://exp-blog.com ------------------------------------------------------------------------- 大致题意: 题意不难懂,对于任意的数字串n,都可以压缩存储为 c1 d1 c2 d2 .... ck d...

ζёСяêτ - 小優YoU 7021

统计通话次数和时间的软件_通话时间统计下载

通话时间统计是免费却非常实用的手机通话时间记录应用软件,主要可以帮助用户清晰的统计每个月电话话费的使用情况,也可以根据用户的自定义设定,来统计自己不同的通话次数和分钟数,可以准确统计用户每月、每礼拜、每天的呼出、接入和未接电话详情,让用户可以轻松查询到自己通话的详细数据。有了通话时间统计,用户就可以清楚地知道跟某人讲了多长时间的电话,清楚明白自己的话费具体花在哪里了。软件介绍:用于用户记录通话时间...

weixin_39754616的博客 4064

统计通话次数和时间的软件_通话时间统计

通话时间统计app是一款好用通话管理软件,帮你快捷记录各项电话来电时间以及阳历与农历日期,更有各项分段统计参考,让你随时知道与各个好友的通话时长,与通话时间最多的人是谁,一键轻松查看,还可在线查看日历,更有多项功能等你来下载,方便为你节省话费以及各项流量,让你更好管理通话时间,最火软件网站为你提供通话时间统计下载地址,喜欢的小伙伴快去下载吧!app功能1、随时方便用户在线查看各项通话记录,找到最近...

weixin_39687189的博客 4901
上一篇: [PAT甲级]1015. Reversible Primes (20)(可逆素数判断)
下一篇: [PAT甲级]1017. Queueing at Bank (25)(银行办理业务平均等待时间)
whl_program
博客等级 码龄11年 101粉丝 279原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值