本文主要是介绍1016 Phone Bills (25 分),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
我之所以直接把代码贴上来,而没有太多解释,不是为了解析这道题目,而是为了方便我以后自己查看。
这道题花了两个小时都没做出来,最后看了答案才知道,可以用map与向量的映射,这是第一次用,所以学到了。其次是不知道怎么算时间的差值和根据每个阶段的费用求结果。
方法有2:
1.直接求起始日期时间与终止日期的差值
2.求当前日期与每月1号的相对差值,然后两个日期的相对差值相减就是绝对差值
while(start.day < end.day || start.hour < end.hour || start.min < start.min){start.min++;if(start.min == 60){start.min = 0;start.hour++;}if(start.hour == 24){start.hour=0;start.day++;}
}
#include<cstdio>
#include<iostream>
#include<string>
#include<algorithm>
#include<map>
#include<vector>
using namespace std;
const int maxn=1005;
int toll[25]={0};
struct node{string name;int mon,day,hou,min,time,state; //记录登入登出时间
}; bool cmp(node a,node b){return a.name != b.name?a.name < b.name: a.time < b.time;
}
//每个通话记录的相对开销
double start(node &call){double total=toll[call.hou]*call.min + call.day*60*toll[24];for(int i=0;i<call.hou;i++){total+=toll[i]*60;}return total/100.0;
} int main(){for(int i=0;i<24;i++){scanf("%d",&toll[i]);toll[24] += toll[i];}int n;scanf("%d",&n);vector<node> Node(n);for(int i=0;i<n;i++){cin >> Node[i].name;scanf("%d:%d:%d:%d",&Node[i].mon,&Node[i].day,&Node[i].hou,&Node[i].min);string temp;cin >> temp;Node[i].state = (temp =="on-line")?1:0;//把时间转化为分钟Node[i].time =Node[i].day*24*60 + Node[i].hou*60 + Node[i].min; }sort(Node.begin(),Node.end(),cmp);map<string,vector<node> > mp; //存名字与向量对照关系 for(int i=1;i<n;i++){ //把同名的人 且满足电话通信关系的 存入一个向量中 if(Node[i].name == Node[i-1].name && Node[i-1].state == 1 && Node[i].state==0){mp[Node[i-1].name].push_back(Node[i-1]);mp[Node[i].name].push_back(Node[i]);}} map<string,vector<node> >::iterator it;for(it=mp.begin();it!=mp.end();it++){vector<node> tmp = it->second;cout<<it->first;printf(" %02d\n",tmp[0].mon);double total=0;for(int i=0;i<tmp.size();i+=2){double t =start(tmp[i+1]) - start(tmp[i]);printf("%02d:%02d:%02d %02d:%02d:%02d %d $%.2f\n",tmp[i].day,tmp[i].hou,tmp[i].min,tmp[i+1].day,tmp[i+1].hou,tmp[i+1].min,tmp[i+1].time-tmp[i].time,t);total+=t;}printf("Total amount: $%.2f\n",total);} return 0;
}
这篇关于1016 Phone Bills (25 分)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!