1016 Phone Bills (25分)
这个题相对复杂一点,读题用了20分钟,然后就是疯狂写代码,其实这个主要是计算费用复杂一点,其他倒是还好,第一遍提交有测试点1,2没过,回头看了一眼代码觉得计算不可能出错,然后一分析就是测试点1,2很显然是有用户但是没有有效数据,所以不用输出名字。修改后提交AC。
附本人AC代码:
#include<iostream>
#include<vector>
#include<string>
#include<map>
#include<algorithm>
using namespace std;
vector<int>rate(24);
double daymoney = 0;
struct Node {int d, h, s;int status;
};
map<string, vector<Node>>Map;
bool cmp(Node&A, Node&B) {return A.d == B.d ? A.h == B.h ? A.s < B.s : A.h < B.h : A.d < B.d;
}
double handle(Node A, Node B) {double res = 0;printf("%02d:%02d:%02d %02d:%02d:%02d %d ", A.d, A.h, A.s, B.d, B.h, B.s,(B.d*24*60+B.h*60+B.s-A.d*24*60-A.h*60-A.s));if (A.d == B.d) {if (A.h == B.h) {res += (B.s - A.s)*rate[A.h];}else {res += (60 - A.s)*rate[A.h];for (int j = A.h + 1; j < B.h; j++) {res += rate[j] * 60;}res += rate[B.h] * B.s;}}else {res += (60 - A.s)*rate[A.h];for (int j = A.h + 1; j <= 23; j++) {res += rate[j] * 60;}for (int j = A.d + 1; j < B.d; j++) {res += daymoney;}for (int j = 0; j < B.h; j++)res += rate[j] * 60;res += (B.s)*rate[B.h];}printf("$%.2lf\n", res/100);return res;
}
int main() {int N, d, h, m, s;string name, status;for (int i = 0; i < 24; i++) {scanf("%d", &rate[i]);daymoney += rate[i] * 60;}scanf("%d", &N);for (int i = 0; i < N; i++) {cin.ignore();cin >> name;scanf("%d:%d:%d:%d", &m, &d, &h, &s);cin >> status;if (status == "on-line")Map[name].push_back({ d,h,s,1 });else Map[name].push_back({ d,h,s,0 });}for (auto it = Map.begin(); it != Map.end(); it++)sort(it->second.begin(), it->second.end(), cmp);for (auto it = Map.begin(); it != Map.end(); it++) {int flag = 0;double res = 0;for (int j = 0; j < it->second.size()-1; j++) {if (it->second[j].status == 1 && it->second[j + 1].status == 0) {if (flag == 0) {printf("%s %02d\n", it->first.c_str(), m);flag = 1;}res += handle(it->second[j], it->second[j + 1]);}}if(flag==1)printf("Total amount: $%.2lf\n", res/100);}return 0;
}
1016 Phone Bills (25分)相关推荐
- 【注意点分析】1016 Phone Bills (25 分)
立志用最少的代码做最高效的表达 PAT甲级最优题解-->传送门 A long-distance telephone company charges its customers by the fo ...
- PAT 1016 Phone Bills (25分) 逻辑较为复杂 sort() + map
题目 A long-distance telephone company charges its customers by the following rules: Making a long-dis ...
- 1016 Phone Bills (25 分) 【未完成】【难度: 中 / 知识点: 模拟】
https://pintia.cn/problem-sets/994805342720868352/problems/994805493648703488
- 1016 Phone Bills (25)(25 分)
1 题目 2 解题思路 3 AC代码 4 总结 1 题目 A long-distance telephone company charges its customers by the followin ...
- 1016. Phone Bills (25)
时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue 去掉非法数据计算账单 A long-distance telep ...
- PAT甲级1016 Phone Bills :[C++题解]字符串处理(复杂题)(C语言格式化读入、输出很便利!!!)
文章目录 题目分析 题目链接 题目分析 原题: 长途电话公司按以下规则向客户收费: 拨打长途电话每分钟要花费一定的费用,具体收费取决于拨打电话的时间. 客户开始拨打长途电话的时间将被记录,客户挂断电话 ...
- 12门课100分直博清华!这份成绩单冲上热搜,但学霸小伙也曾考过25分
点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 金磊 明敏 发自 凹非寺 量子位 报道 | 公众号 QbitAI 一 ...
- PTA 7-3 旅游规划 (25分)(双权值Dijkstra最短路)
7-3 旅游规划 (25分) 有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路费.现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径.如果有若干条路 ...
- PTA 03-树1 树的同构 (25分)
题目地址 https://pta.patest.cn/pta/test/15/exam/4/question/711 5-3 树的同构 (25分) 给定两棵树T1和T2.如果T1可以通过若干次左右 ...
最新文章
- 美国正在衰落的24个行业:“猝不及防”还是“温水煮青蛙”?
- 网页效果图设计之色彩索引
- 【Groovy】闭包 Closure ( 闭包参数绑定 | curry 函数 | rcurry 函数 | ncurry 函数 | 代码示例 )
- h5 rtmp推荐控件_H5播放Rtmp之videojs播放
- Cocos Creator JS 时间戳日期转换
- 利用ArcGIS Engine、VS .NET和Windows控件开发GIS应用
- word之八大文本替换技巧
- iis7 php 文件 不可写,PHP配置文件不會加載IIS7 x64
- B. Balanced Lineup
- 论坛中的验证码的作用
- (转)理解SQLSERVER中的排序规则
- java buffer类_Java ByteBuffer类
- bzoj 2627: JZPKIL [伯努利数 Pollard-rho]
- Linux下修改文件权限
- WebSocket 实现链接 群聊(low low low 版本)
- 【OpenCV学习笔记】【函数学习】五(颜色空间转换cvCvtColor()函数)
- LRU算法的一种实现方法
- 原生ajax响应json数据
- Java新人入职第十天
- Android实现记账本(麻雀虽小,五脏俱全)