1016. Phone Bills (25)

来源:互联网 发布:大型网络3d手机游戏 编辑:程序博客网 时间:2024/06/05 10:46

这个原先对排序及vector一次没用过,差不多照着孙佰贵的抄了一份,理解不难

on-line和off-line的匹配,尾端操作,感觉变长数组是栈的高配

string类型的用法,输入输出比较。。。

#include<iostream>#include<string>#include<vector>#include<algorithm>using namespace std;typedef struct call{string name;int mouth;int dd;int hh;int mm;int total;string status;}call;int charge[24];vector<call> all_calls;vector<call> format_calls;bool compare(call a, call b){if(a.name<b.name) return 1;else if(a.name==b.name&&a.total<b.total) return 1;else return 0;}int chargebytime(call s)//通话费用是用开始和结束的两个时间代入的差 ,开始和结束的时间的基准是以当月的第一天的00:00:00 {//化为dd:hh:mm:ss计算从每月的第一天零点到目前的话费 int ChargePerDay=0;//每天的总话费 int sum=0;int i;for(i=0;i<24;i++){ChargePerDay+=charge[i]*60;}sum=(s.dd-1)*ChargePerDay;for(i=0;i<s.hh;i++){sum+=charge[i]*60;}sum+=charge[i]*s.mm;return sum;}int CallLast(call s,call t){return t.total-s.total;}double CallCost(call s,call t){return (double)(chargebytime(t)-chargebytime(s))/100;}int main(){for(int i=0;i<24;i++){cin>>charge[i];}int n;cin>>n;for(int i=0;i<n;i++){call c;cin>>c.name;cin>>c.mouth;getchar();cin>>c.dd;getchar();cin>>c.hh;getchar();cin>>c.mm;c.total= (c.dd-1)*24*60+c.hh*60+c.mm;cin>>c.status;all_calls.push_back(c);}sort(all_calls.begin(),all_calls.end(),compare);//filter delete those bad recordint haveonline=0;string curname;for(int i=0;i<all_calls.size();i++){if(haveonline==0&&all_calls[i].status=="on-line"){format_calls.push_back(all_calls[i]);haveonline=1;curname=all_calls[i].name;}else if(haveonline==1&&all_calls[i].status=="on-line"){format_calls.pop_back();format_calls.push_back(all_calls[i]);haveonline=1;curname=all_calls[i].name;}else if(haveonline==1&&all_calls[i].status=="off-line"&&all_calls[i].name==curname){format_calls.push_back(all_calls[i]);haveonline=0;}}//这种方法会导致最后format_calls最后一位出现“on-line”if((*(format_calls.end()-1)).status=="on-line"){format_calls.pop_back();}//outputdouble totalcost=0;curname=" ";for(int i=0;i<format_calls.size();i+=2){if(format_calls[i].name!=curname){if(curname!=" "){printf("Total amount: $%.2f\n",totalcost);    totalcost=0;    printf("%s %02d\n",format_calls[i].name.c_str(),format_calls[i].mouth);}    else{    printf("%s %02d\n",format_calls[i].name.c_str(),format_calls[i].mouth);    }    curname=format_calls[i].name;}printf("%02d:%02d:%02d",format_calls[i].dd,format_calls[i].hh,format_calls[i].mm);              printf(" ");              printf("%02d:%02d:%02d",format_calls[i+1].dd,format_calls[i+1].hh,format_calls[i+1].mm);              printf(" ");              printf("%d",CallLast(format_calls[i],format_calls[i+1]));              printf(" ");printf("$%.2f\n",CallCost(format_calls[i],format_calls[i+1]));totalcost+=CallCost(format_calls[i],format_calls[i+1]);}printf("Total amount: $%.2f\n",totalcost);}


0 0
原创粉丝点击