Phone Bills

    xiaoxiao2021-03-25  111

    #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("d\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("d:d:d d:d:d ",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; }
    转载请注明原文地址: https://ju.6miu.com/read-13169.html

    最新回复(0)