1016. Phone Bills (25)

来源:互联网 发布:市政工程投资估算软件 编辑:程序博客网 时间:2024/06/11 23:23

IDEA

1.主要思想:将对有记录按姓名-时间顺序排序,然后过滤不合法记录,最后最近收费

2.算时间差方法:算出每个人的总时间,然后相减

3.用printf输出string字符串,str.c_str()


文章参考别人的  http://blog.csdn.net/sunbaigui/article/details/8657062


CODE

#include<iostream>#include<vector>#include<string>#include<algorithm>using namespace std;struct Call{string name;int month,day,hour,minute;int total;string status;};int charge[24];vector<Call> record;vector<Call> vail_record;int cmp(Call c1,Call c2){if(c1.name==c2.name){return c1.total<c2.total;} return c1.name<c2.name;}//calculate money from the begin of month to the time givenint 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 on,Call off){return (double)(chargeByTime(off.total)-chargeByTime(on.total))/100;}int main(){#ifndef ONLINE_JUDGEfreopen("input.txt","r",stdin);#endiffor(int i=0;i<24;i++){cin>>charge[i];}int N;cin>>N;while(N--){Call call;cin>>call.name;scanf("%d:%d:%d:%d",&call.month,&call.day,&call.hour,&call.minute);call.total=call.minute+60*call.hour+24*60*call.day;cin>>call.status;record.push_back(call);}sort(record.begin(),record.end(),cmp);int flag=0;string currname;for(int i=0;i<record.size();i++){if(!flag&&record[i].status=="on-line"){vail_record.push_back(record[i]);flag=1;currname=record[i].name;}else if(flag&&record[i].status=="on-line"){vail_record.pop_back();vail_record.push_back(record[i]);flag=1;currname=record[i].name;}else if(flag&&record[i].status =="off-line"&&record[i].name==currname){vail_record.push_back(record[i]);flag=0;}}//最后一条记录必须为off-line,如果不是就删除 if((*(vail_record.end()-1)).status == "on-line"){vail_record.pop_back();} double totalamount=0;currname="";for(int i=0;i<vail_record.size();i+=2){if(vail_record[i].name!=currname){if(currname!=""){printf("Total amount: $%.2f\n",totalamount);totalamount = 0;printf("%s %02d\n",vail_record[i].name.c_str(),vail_record[i].month);}else{printf("%s %02d\n",vail_record[i].name.c_str(),vail_record[i].month);}currname = vail_record[i].name;}//输出一条记录 printf("%02d:%02d:%02d",vail_record[i].day,vail_record[i].hour,vail_record[i].minute);printf(" ");printf("%02d:%02d:%02d",vail_record[i+1].day,vail_record[i+1].hour,vail_record[i+1].minute);printf(" ");printf("%d",vail_record[i+1].total-vail_record[i].total);printf(" ");printf("$%.2f\n",calCost(vail_record[i],vail_record[i+1]));totalamount+=calCost(vail_record[i],vail_record[i+1]);}printf("Total amount: $%.2f\n",totalamount);#ifndef ONLINE_JUDGEfclose(stdin);#endifreturn 0;}



0 0
原创粉丝点击