`
linest
  • 浏览: 155494 次
  • 性别: Icon_minigender_1
  • 来自: 内蒙古
社区版块
存档分类
最新评论

pat-1016 Phone Bills

    博客分类:
  • pat
 
阅读更多

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


按用户分组打印月账单

关键点1.处理好记录间的匹配,删掉坏的记录
2.不同时段价不同,计算好价格

此题好烦。。。。。。



#include<iostream>
using namespace std;
#include<vector>
#include<string>
#include<algorithm>




struct Call
{
	string name;
	int month;
	int date;
	int hour;
	int minute;
	int total;
	string status;
};

int charge[24];
vector<Call> all_calls;
vector<Call> format_calls;

bool compare(Call a,Call b)
{
	if(a.name < b.name)
		return 1;
	else if(a.name == b.name && a.total < b.total)
		return 1;
	else
		return 0;
}

void show(Call c)
{
	cout<<c.name<<" ";
	cout<<c.month<<":"<<c.date<<":"<<c.hour<<":"<<c.minute<<" ";
	cout<<c.status<<endl;
}

//calculate money from the begin of month to the time given
int chargeByTime(int time)
{
	int hours = time/60;
	int minutes = time%60;
	int money = 0;
	int i;
	for(i = 0;i<hours;i++)
		money += charge[i%24]*60;
	money += charge[i%24]*minutes;
	return money;
}

double calCost(Call s,Call t)
{
	return (double)(chargeByTime(t.total)-chargeByTime(s.total))/100;
}

int calLast(Call s,Call t)
{
	return (t.date-s.date)*24*60+(t.hour-s.hour)*60+(t.minute-s.minute);
}



int main()
{
	for(int i = 0;i<24;i++)
		cin>>charge[i];
	int N;
	cin>>N;
	while(N--)
	{
		Call c;
		cin>>c.name;
		cin>>c.month;
		getchar();
		cin>>c.date;
		getchar();
		cin>>c.hour;
		getchar();
		cin>>c.minute;
		c.total = c.minute + 60*c.hour + 24*60*c.date;
		cin>>c.status;
		all_calls.push_back(c);
	}
	sort(all_calls.begin(),all_calls.end(),compare);

	//filter delete those bad record
	bool haveonline = false;
	string curname;
	for(int i=0;i<all_calls.size();i++)
	{
		if(haveonline == false && all_calls[i].status =="on-line" )
		{
			format_calls.push_back(all_calls[i]);
			haveonline = true;
			curname = all_calls[i].name;
		}
		else if(haveonline == true && all_calls[i].status =="on-line")
		{
			format_calls.pop_back();
			format_calls.push_back(all_calls[i]);
			haveonline = true;
			curname = all_calls[i].name;
		}
		else if(haveonline == true && all_calls[i].status =="off-line"&&all_calls[i].name ==curname)
		{
			format_calls.push_back(all_calls[i]);
			haveonline = false;
		}
	}
	//the last must be offline
	if((*(format_calls.end()-1)).status == "on-line")
		format_calls.pop_back();

	//output
	double totalcost = 0;
	curname = "";
	for(int i=0;i<format_calls.size();i+=2)
	{

		if(format_calls[i].name != curname)
		{
			if(curname!="")
			{
				printf("Total amount: $%.2f\n",totalcost);
				totalcost = 0;
				printf("%s %02d\n",format_calls[i].name.c_str(),format_calls[i].month);
			}
			else
			{
				printf("%s %02d\n",format_calls[i].name.c_str(),format_calls[i].month);
			}
			curname = format_calls[i].name;
		}
		printf("%02d:%02d:%02d",format_calls[i].date,format_calls[i].hour,format_calls[i].minute);
		printf(" ");
		printf("%02d:%02d:%02d",format_calls[i+1].date,format_calls[i+1].hour,format_calls[i+1].minute);
		printf(" ");
		printf("%d",calLast(format_calls[i],format_calls[i+1]));
		printf(" ");
		printf("$%.2f\n",calCost(format_calls[i],format_calls[i+1]));
		totalcost+=calCost(format_calls[i],format_calls[i+1]);
	}
	printf("Total amount: $%.2f\n",totalcost);
	
	
}
分享到:
评论

相关推荐

    Bullet-Bills-Excellent-Adventure:Bullet Bill的精彩冒险

    《Bullet Bills的精彩冒险》是一款基于Ruby编程语言开发的游戏项目,名为"Bullet-Bills-Excellent-Adventure"。在这个项目中,开发者运用了Ruby的灵活性和强大的功能,为玩家创造了一个充满刺激与挑战的冒险世界。 ...

    NFL Buffalo Bills Wallpapers HD Custom NewTab-crx插件

    产品特点:★随机播放所有NFL Buffalo Bills壁纸背景,或仅洗净您最喜欢的NFL Buffalo Bills背景壁纸。 ★便签,待办事项和提醒,事件倒计时。 ★Live NFL Buffalo Bills壁纸动画,NFL Buffalo Bills主题的屏保。 ★...

    split-bills:一个微小的React.js移动Web应用程序,可帮助您轻松拆分欢乐时光账单

    《使用React.js构建移动Web应用:split-bills详解》 在现代前端开发中,React.js以其组件化、高效渲染及强大的社区支持,成为了构建Web应用的首选框架之一。本篇文章将详细探讨一个基于React.js的微型移动Web应用...

    healthy-bills-client

    Create React App入门 该项目是通过引导的。 可用脚本 在项目目录中,可以运行: npm start 在开发模式下运行应用程序。 打开在浏览器中查看它。 如果您进行编辑,则页面将重新加载。 您还将在控制台中看到任何...

    475-bills-wip

    更新模型:bill.js pay.js 公共:js:script_bill.js 路由:bill_controller.js pay_controller.js 视图:bill_add.ejs routes.js

    Shared-Bills-Splitter:使用Spring Boot控制台应用程序,JPA,图形。 JetBrains学院的Java培训项目

    本项目——“Shared-Bills-Splitter”是一个使用Spring Boot的控制台应用程序,专门用于解决朋友间共同消费后账单分摊的问题。同时,它还结合了Java Persistence API(JPA)和图形界面,使得操作更加直观便捷。 ...

    School-bills-system:我用这个系统来计算宿舍的成绩

    "School-bills-system"是一个专为计算学生宿舍成绩设计的系统。这个系统旨在高效、准确地处理与学生宿舍相关的各种费用,包括住宿费、水电费、维修费等,并且能够根据学生的消费情况生成相应的账单。以下是这个系统...

    Bills Tracker-开源

    《开源账单追踪器——Bills Tracker 深度解析》 在当今信息化社会,个人财务管理变得越来越重要,尤其在处理各种账单时,一款高效、便捷的工具必不可少。"Bills Tracker-开源"就是这样一款专为用户打造的账单追踪...

    simple-qrbill:新的 CH QR-Bills 的简单生成器

    【标题】"simple-qrbill:新的 CH QR-Bills 的简单生成器" 是一个基于JavaScript的库,专门设计用于生成瑞士标准的QR-Bill。这种技术对于那些需要为瑞士客户提供电子支付方式的开发者来说非常实用,因为它使得创建...

    雅思听力单词必备.doc

    - **Cordless Phone**: 无绳电话。 - **Closed Circuit TV**: 闭路电视。 - **Cable and Internet**: 有线电视和互联网。 - **Heating System**: 加热系统。 - **Carpet**: 地毯。 - **Blanket**: 毛毯。 - *...

    Bills_Test

    在“Bills_Test”这个项目中,我们关注的是一个与办公室管理系统相关的软件或应用程序。从提供的信息来看,这个系统可能用于处理与财务、发票、账单等相关的事务,旨在提高工作效率,减少错误,并确保办公室的财务...

    automatic-bills-downloader-android:Android 应用程序可自动下载经常性账单并将其存储在 Dropbox 中

    标题中的“automatic-bills-downloader-android”是一款专为Android平台设计的应用程序,其核心功能是自动化下载用户的定期账单,并将这些文件安全地保存至Dropbox云存储服务中。这款应用利用了Java编程语言,因此...

    bills-tracking-app

    账单追踪应用使用Bootstrap,PHP和MYSQL制作的#Bills跟踪应用#特征 :glowing_star: :pushpin: 添加账单 :pushpin: 按月份和年份查看账单 :pushpin: 查看最近添加的账单 :pushpin: 查看按日期排序的帐单(ASC和DESC...

    Bills User Accounting Entries Relationship Pricin

    基于给定文件信息,这里是一篇关于Bills User Accounting Entries与FLEXCUBE Retail之间关系的定价技术文档分析的知识点总结。 首先,文档提到了一个名为“AccountingEntries”的主题,这很可能是指在FLEXCUBE ...

    bills记账单springboot小实战

    在本项目"bills记账单springboot小实战"中,我们将探讨如何利用Spring Boot这一流行的Java开发框架,配合MySQL数据库,构建一个简单的记账应用。这个实战项目非常适合那些已经学习过Spring Boot基础的同学,旨在...

    Oracle Bills of Material User’s Guide Release 11i

    Oracle Bills of Material User’s Guide Release 11i

    Buffalo Bills Wallpapers-crx插件

    我们的扩展名Buffalo Bills Wallpapers将完全改变您显示器的屏幕!您的浏览器将使用应用程序Buffalo Bills New Tab Wallpapers以新鲜的色彩播放。安装了我们的扩展程序后,您将获得美丽多彩的背景,您可以在工作中...

    Bills Image-Uploader &amp; Resizer-开源

    使用Bills Image-Uploader&Resizer,您可以将JPEG和PNG或GIF文件上传到您的服务器。 它会自动调整图像文件的大小并创建缩略图。 优化用于phpCMS(www.phpcms.de)-需要GD-Lib。

    福建省长泰县第一中学八年级英语下册《Unit 1 Will people have robots》A同步训练 人教新目标版

    - 钞票:bills,信用卡:credit card - 更少的作业:less homework(homework是不可数名词,用less修饰) - 值得:worth,喜欢上:fall in love with - 火箭:rockets - 悠闲的时间:leisure time,更多的:...

Global site tag (gtag.js) - Google Analytics