#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<vector>
#include<algorithm>
#include<string>
#include<cstring>
#include<map>
#include<iterator>
using namespace std; #define ONLine ("on-line")
struct Record
{
Record(){};
Record(char *szName,char* szTime,char* szOnline)
{
bOnline = (strcmp(szOnline,ONLine)==);
strName = szName;
strTime = szTime;
}
string strName;
string strTime;
bool bOnline;
};
struct RecordTime
{
string strStartTime;
string strEndTime;
RecordTime(string starttime,string endtime)
{
strStartTime = starttime;
strEndTime = endtime;
}
RecordTime(){}
};
struct MyTime
{
MyTime(){};
MyTime(const char *cTime)
{
dd = *(cTime[]-'')+(cTime[]-'');
hh = *(cTime[]-'')+(cTime[]-'');
mm = *(cTime[]-'')+(cTime[]-'');
iTick = dd**+hh*+mm;
}
int dd;
int hh;
int mm;
int iTick;
};
int iPrice[];
map<string,int> mapRecord;
vector<Record> vcRecord[];
vector<RecordTime> vcDisplay[];
bool Comp(const Record& r1,const Record& r2)
{
return r1.strTime.compare(r2.strTime)<;
}
int getOneDayBill()
{
int iSum = ;
for(int i=;i<;++i)
iSum += (*iPrice[i]);
return iSum;
}
float DisplayOneCall(const RecordTime &rt)
{
string outStartTime = rt.strStartTime.substr(,);
string outEndTime = rt.strEndTime.substr(,);
printf("%s %s ",outStartTime.c_str(),outEndTime.c_str());
MyTime mtime1(outStartTime.c_str()),mtime2(outEndTime.c_str());
int iTotalTime = mtime2.iTick - mtime1.iTick;
float fTatalBill = 0.0f; //计算账单,用每一分钟遍历,可以AC
/*for(int dd=mtime1.dd,hh=mtime1.hh,mm=mtime1.mm;
!(dd==mtime2.dd&&hh==mtime2.hh&&mm==mtime2.mm);)
{
fTatalBill += iPrice[hh];
if(++mm == 60)
{
mm = 0;
++hh;
}
if(hh == 24)
{
hh = 0;
++dd;
}
}
*/
//把中间几个整天提出来,然后剩余的按分钟遍历,可以AC
/*int iDay = iTotalTime/60/24;
fTatalBill += iDay*getOneDayBill();
for(int hh=mtime1.hh,mm=mtime1.mm;
!(hh==mtime2.hh&&mm==mtime2.mm);)
{
fTatalBill += iPrice[hh];
if(++mm == 60) mm = 0,++hh;
if(hh == 24) hh = 0;
}
*/ int iDay = iTotalTime//;
fTatalBill += iDay*getOneDayBill();
if((mtime1.hh > mtime2.hh)
|| (mtime1.hh == mtime2.hh&&(mtime1.mm> mtime2.mm)))
mtime2.hh += ;
if(mtime1.hh == mtime2.hh && mtime2.mm>mtime1.mm)
fTatalBill += iPrice[mtime1.hh]*(mtime2.mm-mtime1.mm);
else
for(int hh = mtime1.hh;hh<=mtime2.hh;++hh)
{
if(hh == mtime1.hh)
fTatalBill += iPrice[hh%]*(-mtime1.mm);
else if(hh == mtime2.hh)
fTatalBill += iPrice[hh%]*(mtime2.mm);
else
fTatalBill += iPrice[hh%]*();
}
fTatalBill = 1.0*fTatalBill/;
printf("%d $%.2f\n",iTotalTime,fTatalBill);
return fTatalBill;
}
int main()
{
for(int i=;i<;++i)
scanf("%d",&iPrice[i]);
int n;
scanf("%d",&n);
int cnt=;
for(int i=;i<n;++i)
{
char szName[],szTime[],szOnline[];
scanf("%s%s%s",szName,szTime,szOnline);
Record record(szName,szTime,szOnline);
if(mapRecord.find(szName)==mapRecord.end())
{
mapRecord[szName] = cnt++;
}
vcRecord[mapRecord[szName]].push_back(record);
}
for(int i=;i<cnt;++i)
{
sort(vcRecord[i].begin(),vcRecord[i].end(),Comp);
int iFindOnLine = -;
for(int j=;j<vcRecord[i].size();++j)
{
if(vcRecord[i][j].bOnline==false && iFindOnLine != -)
{
RecordTime rt(vcRecord[i][iFindOnLine].strTime,
vcRecord[i][j].strTime);
vcDisplay[i].push_back(rt);
iFindOnLine = -;
}
else if(vcRecord[i][j].bOnline)
{
iFindOnLine = j;
}
}
} map<string,int>::iterator it = mapRecord.begin();
for(;it != mapRecord.end();it++)
{
int i = it->second;
if(vcDisplay[i].size()> )
{
string strYue = vcRecord[i][].strTime.substr(,);
printf("%s %s\n",it->first.c_str(),strYue.c_str());
float fSum = ;
for(int j=;j<vcDisplay[i].size();++j)
fSum +=DisplayOneCall(vcDisplay[i][j]);
printf("Total amount: $%.2f\n",fSum);
}
else
{ }
} return ;
}

PAT甲级1016Phone Bills的更多相关文章

  1. PAT甲级1016. Phone Bills

    PAT甲级1016. Phone Bills 题意: 长途电话公司按以下规定向客户收取费用: 长途电话费用每分钟一定数量,具体取决于通话时间.当客户开始连接长途电话时,将记录时间,并且客户挂断电话时也 ...

  2. PAT甲级题解(慢慢刷中)

    博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6102219.html特别不喜欢那些随便转载别人的原创文章又不给 ...

  3. 【转载】【PAT】PAT甲级题型分类整理

    最短路径 Emergency (25)-PAT甲级真题(Dijkstra算法) Public Bike Management (30)-PAT甲级真题(Dijkstra + DFS) Travel P ...

  4. PAT甲级1131. Subway Map

    PAT甲级1131. Subway Map 题意: 在大城市,地铁系统对访客总是看起来很复杂.给你一些感觉,下图显示了北京地铁的地图.现在你应该帮助人们掌握你的电脑技能!鉴于您的用户的起始位置,您的任 ...

  5. PAT甲级1127. ZigZagging on a Tree

    PAT甲级1127. ZigZagging on a Tree 题意: 假设二叉树中的所有键都是不同的正整数.一个唯一的二叉树可以通过给定的一对后序和顺序遍历序列来确定.这是一个简单的标准程序,可以按 ...

  6. PAT甲级1123. Is It a Complete AVL Tree

    PAT甲级1123. Is It a Complete AVL Tree 题意: 在AVL树中,任何节点的两个子树的高度最多有一个;如果在任何时候它们不同于一个,则重新平衡来恢复此属性.图1-4说明了 ...

  7. PAT甲级1119. Pre- and Post-order Traversals

    PAT甲级1119. Pre- and Post-order Traversals 题意: 假设二叉树中的所有键都是不同的正整数.一个唯一的二进制树可以通过给定的一对后序和顺序遍历序列来确定,也可以通 ...

  8. PAT甲级1114. Family Property

    PAT甲级1114. Family Property 题意: 这一次,你应该帮我们收集家族财产的数据.鉴于每个人的家庭成员和他/她自己的名字的房地产(房产)信息,我们需要知道每个家庭的规模,以及他们的 ...

  9. PAT甲级1111. Online Map

    PAT甲级1111. Online Map 题意: 输入我们当前的位置和目的地,一个在线地图可以推荐几条路径.现在你的工作是向你的用户推荐两条路径:一条是最短的,另一条是最快的.确保任何请求存在路径. ...

随机推荐

  1. jquery动态为个span,input,div,等标签赋值的方法总结,js动态隐藏div

    1.jquery为span和div标签赋值. <span id="span1"></span> <div id="div1"> ...

  2. 关于Git的简单使用

    新电脑git push一直出问题,到现在也没有解决,但是一些git的命令还是有用的,就先记下来吧.(下图就是没解决的报错) 一.上传本地项目到git 1.初始化git git init 2.配置用户名 ...

  3. HDU——1267 下沙的沙子有几粒?

    下沙的沙子有几粒? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total ...

  4. 问答:怎样规划CSS 中 的命名方式 怎样看待 CSS 中 BEM 的命名方式?

    好多盆友 非常纠结 css命名规则 怎么弄,还没起步就被绊住了.那么今天蝈蝈就针对这个问题来讨论一下 没什么技术 含量.但却对效率开发至关重要的 "问题". 下文是一些知乎大神的个 ...

  5. Hibernate——三种状态的理解

    在Hibernate中有三种状态,对这三种状态的深入的理解,能够更好的理解Hibernate的执行机制. 在整个Hibernate中这三种状态是能够进行转换的. 1.Transient Object( ...

  6. Magento 模块开发之DispatchEvent

    在这一章节中.我们来了解 Magento 中的事件分发机制 Mage::dispatchEvent() 在创建自己的模块时, Event 事件的分发将会变成十分实用且有效 以个人的经验. 事件的分发使 ...

  7. 专訪印度电商Snapdeal CEO:学阿里还是京东

    [摘要]印度的互联网正成资本关注下一个投资焦点,也可能成中国互联网企业走向海外的桥头堡.为此.腾讯科技最近将推出走近印度"硅谷"系列文章,帮助大家了解印度互联网. 腾讯科技与Sna ...

  8. sql server中数据约束相关的查询

    根据表名查找数据约束 SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE TABLE_NAME = 'CMS_EventLog'; SEL ...

  9. JSP-Runoob:Cookie 处理

    ylbtech-JSP-Runoob:Cookie 处理 1.返回顶部 1. JSP Cookie 处理 Cookie是存储在客户机的文本文件,它们保存了大量轨迹信息.在servlet技术基础上,JS ...

  10. bzoj1061&&bzoj3256

    http://www.lydsy.com/JudgeOnline/problem.php?id=1061 单纯形... 先开始我不知道对偶,看着代码不知所措,并不能懂他们写的是什么... 单纯形的标准 ...