Phone Bills

来源:互联网 发布:网眼监控软件破解版 编辑:程序博客网 时间:2024/05/16 03:22
#include <iostream>#include<cstdio>#include<algorithm>#include<cmath>#include<map>#include<string>#include<vector>using namespace std;const int maxn=1010;int toll[24];int n;struct record{    string name;    int m;    int d;    int h;    int min;    int flag;//标记是打电话还是挂电话} c[maxn];vector<record>cus[maxn];//每个人的有效通话记录map<string,int>mp;bool cmp(record a,record b){    if(a.name!=b.name)return a.name<b.name;//先按照姓名再按照电话发生的时间进行排队    else if(a.m!=b.m)return a.m<b.m;    else if(a.d!=b.d)return a.d<b.d;    else if(a.h!=b.h)return a.h<b.h;    else return a.min<b.min;}int cost(int d1,int h1,int min1,int d2,int h2,int min2,int &fen)//两个时间间隔和之间的话费{    int ans=0;    fen=0;    while(d1<d2||h1<h2||min1<min2)    {        ans++;        min1++;        fen+=toll[h1]*1;        if(min1==60)        {            min1=0;            h1++;        }        if(h1==24)        {            h1=0;            d1++;        }    }    return ans;}int main(){  //  freopen("d://jin.txt","r",stdin);    for(int i=0; i<24; i++)        cin>>toll[i];    cin>>n;    for(int i=0; i<n; i++)    {        string name;        cin>>c[i].name;        scanf("%d:%d:%d:%d",&c[i].m,&c[i].d,&c[i].h,&c[i].min);        string s;        cin>>s;        if(s=="on-line")        {            on++;            c[i].flag=0;        }        else c[i].flag=1;           }    sort(c,c+n,cmp);    int people=1;//总共有几个有有效通话记录的人,从1开始    for(int i=0; i<n; i++)    {        if(c[i].name==c[i+1].name&&c[i].flag==0&&c[i+1].flag==1)//一对有效的通话记录        {if(mp[c[i].name]==0){mp[c[i].name]=people;people++;}//给名字做hash对应一个cus            cus[mp[c[i].name]].push_back(c[i]);             cus[mp[c[i].name]].push_back(c[i+1]);        }    }    for(int i=1; i<people; i++)    {        int ans=0;int fen=0;        cout<<cus[i][0].name<<' ';        printf("%02d\n",cus[i][0].m);        for(int j=0; j<cus[i].size()-1; j++)            if(cus[i][j].flag==0&&cus[i][j+1].flag==1)            {                printf("%02d:%02d:%02d %02d:%02d:%02d ",cus[i][j].d,cus[i][j].h,cus[i][j].min,cus[i][j+1].d,cus[i][j+1].h,cus[i][j+1].min);                cout<<cost(cus[i][j].d,cus[i][j].h,cus[i][j].min,cus[i][j+1].d,cus[i][j+1].h,cus[i][j+1].min,fen)<<' ';                cout<<'$';                printf("%.2f\n",fen/100.0);                ans+=fen;            }        cout<<"Total amount: $";        printf("%.2f\n",ans/100.0);    }return 0;       }

0 0
原创粉丝点击