1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstdlib>
  4. #include<vector>
  5. #include<algorithm>
  6. #include<string>
  7. #include<cstring>
  8. #include<map>
  9. #include<iterator>
  10. using namespace std;
  11.  
  12. #define ONLine ("on-line")
  13. struct Record
  14. {
  15. Record(){};
  16. Record(char *szName,char* szTime,char* szOnline)
  17. {
  18. bOnline = (strcmp(szOnline,ONLine)==);
  19. strName = szName;
  20. strTime = szTime;
  21. }
  22. string strName;
  23. string strTime;
  24. bool bOnline;
  25. };
  26. struct RecordTime
  27. {
  28. string strStartTime;
  29. string strEndTime;
  30. RecordTime(string starttime,string endtime)
  31. {
  32. strStartTime = starttime;
  33. strEndTime = endtime;
  34. }
  35. RecordTime(){}
  36. };
  37. struct MyTime
  38. {
  39. MyTime(){};
  40. MyTime(const char *cTime)
  41. {
  42. dd = *(cTime[]-'')+(cTime[]-'');
  43. hh = *(cTime[]-'')+(cTime[]-'');
  44. mm = *(cTime[]-'')+(cTime[]-'');
  45. iTick = dd**+hh*+mm;
  46. }
  47. int dd;
  48. int hh;
  49. int mm;
  50. int iTick;
  51. };
  52. int iPrice[];
  53. map<string,int> mapRecord;
  54. vector<Record> vcRecord[];
  55. vector<RecordTime> vcDisplay[];
  56. bool Comp(const Record& r1,const Record& r2)
  57. {
  58. return r1.strTime.compare(r2.strTime)<;
  59. }
  60. int getOneDayBill()
  61. {
  62. int iSum = ;
  63. for(int i=;i<;++i)
  64. iSum += (*iPrice[i]);
  65. return iSum;
  66. }
  67. float DisplayOneCall(const RecordTime &rt)
  68. {
  69. string outStartTime = rt.strStartTime.substr(,);
  70. string outEndTime = rt.strEndTime.substr(,);
  71. printf("%s %s ",outStartTime.c_str(),outEndTime.c_str());
  72. MyTime mtime1(outStartTime.c_str()),mtime2(outEndTime.c_str());
  73. int iTotalTime = mtime2.iTick - mtime1.iTick;
  74. float fTatalBill = 0.0f;
  75.  
  76. //计算账单,用每一分钟遍历,可以AC
  77. /*for(int dd=mtime1.dd,hh=mtime1.hh,mm=mtime1.mm;
  78. !(dd==mtime2.dd&&hh==mtime2.hh&&mm==mtime2.mm);)
  79. {
  80. fTatalBill += iPrice[hh];
  81. if(++mm == 60)
  82. {
  83. mm = 0;
  84. ++hh;
  85. }
  86. if(hh == 24)
  87. {
  88. hh = 0;
  89. ++dd;
  90. }
  91. }
  92. */
  93. //把中间几个整天提出来,然后剩余的按分钟遍历,可以AC
  94. /*int iDay = iTotalTime/60/24;
  95. fTatalBill += iDay*getOneDayBill();
  96. for(int hh=mtime1.hh,mm=mtime1.mm;
  97. !(hh==mtime2.hh&&mm==mtime2.mm);)
  98. {
  99. fTatalBill += iPrice[hh];
  100. if(++mm == 60) mm = 0,++hh;
  101. if(hh == 24) hh = 0;
  102. }
  103. */
  104.  
  105. int iDay = iTotalTime//;
  106. fTatalBill += iDay*getOneDayBill();
  107. if((mtime1.hh > mtime2.hh)
  108. || (mtime1.hh == mtime2.hh&&(mtime1.mm> mtime2.mm)))
  109. mtime2.hh += ;
  110. if(mtime1.hh == mtime2.hh && mtime2.mm>mtime1.mm)
  111. fTatalBill += iPrice[mtime1.hh]*(mtime2.mm-mtime1.mm);
  112. else
  113. for(int hh = mtime1.hh;hh<=mtime2.hh;++hh)
  114. {
  115. if(hh == mtime1.hh)
  116. fTatalBill += iPrice[hh%]*(-mtime1.mm);
  117. else if(hh == mtime2.hh)
  118. fTatalBill += iPrice[hh%]*(mtime2.mm);
  119. else
  120. fTatalBill += iPrice[hh%]*();
  121. }
  122. fTatalBill = 1.0*fTatalBill/;
  123. printf("%d $%.2f\n",iTotalTime,fTatalBill);
  124. return fTatalBill;
  125. }
  126. int main()
  127. {
  128. for(int i=;i<;++i)
  129. scanf("%d",&iPrice[i]);
  130. int n;
  131. scanf("%d",&n);
  132. int cnt=;
  133. for(int i=;i<n;++i)
  134. {
  135. char szName[],szTime[],szOnline[];
  136. scanf("%s%s%s",szName,szTime,szOnline);
  137. Record record(szName,szTime,szOnline);
  138. if(mapRecord.find(szName)==mapRecord.end())
  139. {
  140. mapRecord[szName] = cnt++;
  141. }
  142. vcRecord[mapRecord[szName]].push_back(record);
  143. }
  144. for(int i=;i<cnt;++i)
  145. {
  146. sort(vcRecord[i].begin(),vcRecord[i].end(),Comp);
  147. int iFindOnLine = -;
  148. for(int j=;j<vcRecord[i].size();++j)
  149. {
  150. if(vcRecord[i][j].bOnline==false && iFindOnLine != -)
  151. {
  152. RecordTime rt(vcRecord[i][iFindOnLine].strTime,
  153. vcRecord[i][j].strTime);
  154. vcDisplay[i].push_back(rt);
  155. iFindOnLine = -;
  156. }
  157. else if(vcRecord[i][j].bOnline)
  158. {
  159. iFindOnLine = j;
  160. }
  161. }
  162. }
  163.  
  164. map<string,int>::iterator it = mapRecord.begin();
  165. for(;it != mapRecord.end();it++)
  166. {
  167. int i = it->second;
  168. if(vcDisplay[i].size()> )
  169. {
  170. string strYue = vcRecord[i][].strTime.substr(,);
  171. printf("%s %s\n",it->first.c_str(),strYue.c_str());
  172. float fSum = ;
  173. for(int j=;j<vcDisplay[i].size();++j)
  174. fSum +=DisplayOneCall(vcDisplay[i][j]);
  175. printf("Total amount: $%.2f\n",fSum);
  176. }
  177. else
  178. {
  179.  
  180. }
  181. }
  182.  
  183. return ;
  184. }

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. [luoguP1433] 吃奶酪(DP || Dfs)

    传送门 深搜加剪纸可A(O(玄学) 1274ms) ——代码 #include <cmath> #include <cstdio> #include <iostream& ...

  2. HDU 4902 (牛叉的线段树)

    Nice boat Problem Description There is an old country and the king fell in love with a devil. The de ...

  3. logout退出功能是怎么实现的?login登陆功能室怎么实现的

    logout退出功能是怎么实现的?login登陆功能室怎么实现的 login就是登陆成功的时候,在session里面创建好用户对应的数据. logout就是登出的时候,在session里面销毁用户对应 ...

  4. css3 和 html5 笔记

    1.css3 ie下大部分不兼容 ie9以下 浏览器低版本不兼容 需要写 -webket-transition:1s -moz-transition: 1s -o-transition:1s tran ...

  5. FTP用户-禁止登录系统

    OS是Ubuntu 11.10. 1.   which nologin #/usr/sbin/nologin 2.   vim /etc/shells   #在该文件后添加/usr/sbin/nolo ...

  6. 【Cloud Foundry】Could Foundry学习(一)——Could Foundry浅谈

    在阅读的过程中有不论什么问题.欢迎一起交流 邮箱:1494713801@qq.com    QQ:1494713801 Cloud Foundry是VMware推出的业界第一个开源PaaS云平台.他包 ...

  7. 创建.m文件一片空白的错误解决方式

    今天写代码,想继承一个类,突然发现创建的类文件一片空白,如图 之后各种调试发现都解决不了问题,以为是装了xcode6 beta2 版本号的问题,结果发现事实上是我创建错了 我创建的是 watermar ...

  8. Mongo使用

    在用mongo进行查询时,$exists表示是否document是否包括这个field,即使field的value为null也算是包括. $exists Syntax: { field: { $exi ...

  9. Android自定义用户控件简单范例(一)

    一款优秀的移动应用需要具有自己独特统一的风格,通常情况下UI设计师会根据产品需求和使用人群的特点,设计整体的风格,界面的元素和控件的互效果.而原生态的Android控件为开发人员提供的是最基本的积木元 ...

  10. javascript的call和apply

    coffeescript里,每个文件编译成JS后,都是(function(){...}).call(this);的架势 这个call,该怎么理解呢? 在javascript里面,call 或者 app ...