zoukankan      html  css  js  c++  java
  • 【PAT甲级】1016 Phone Bills (25 分)(结构体排序)

    题意:

    输入24个正整数代表从0到23每个小时通话一分钟花费的美分。输入一个正整数N(<=1000),然后输入N组字符串,每个字符串包含客户的名字和通话的时刻以及打出或者挂断的状态。

    按照字典序输出用户的名字,(每一段,按行输出)通话时长和花费,以及Total amount。

    trick:

    对于没打通的用户(没有花费),不要输出它的Total amount。(第1,2数据点答案错误原因)

    AAAAAccepted code:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int a[27];
     4 typedef struct users{
     5     string name;
     6     int month,day,hour,minute,time;
     7     string condition;
     8     int flag;
     9 };
    10 users user[1007];
    11 bool cmp(users a,users b){
    12     if(a.name!=b.name)
    13         return a.name<b.name;
    14     else{
    15         if(a.day!=b.day)
    16             return a.day<b.day;
    17         else if(a.hour!=b.hour)
    18             return a.hour<b.hour;
    19         else
    20             return a.minute<b.minute;
    21     }
    22 }
    23 map<string,double>mp;
    24 int main(){
    25     int all=0;
    26     for(int i=0;i<24;++i){
    27         cin>>a[i];
    28         all+=a[i];
    29     }
    30     int n;
    31     cin>>n;
    32     for(int i=1;i<=n;++i){
    33         cin>>user[i].name;
    34         scanf("%d:%d:%d:%d ",&user[i].month,&user[i].day,&user[i].hour,&user[i].minute);
    35         cin>>user[i].condition;
    36         if(user[i].condition[1]=='n')
    37             user[i].flag=1;
    38     }
    39     sort(user+1,user+1+n,cmp);
    40     string tmp=user[1].name;
    41     user[n+1].name="sewage";
    42     for(int i=1;i<=n+1;++i){
    43         if(user[i].name!=tmp&&mp[tmp])
    44             printf("Total amount: $%.2f
    ",mp[tmp]);
    45         tmp=user[i].name;
    46         if(user[i].flag==1&&user[i+1].flag==0&&user[i].name==user[i+1].name){
    47             if(!mp[user[i].name]){
    48                 cout<<user[i].name;
    49                 printf(" %02d
    ",user[i].month);
    50             }
    51             printf("%02d:%02d:%02d %02d:%02d:%02d ",user[i].day,user[i].hour,user[i].minute,user[i+1].day,user[i+1].hour,user[i+1].minute);
    52             double sum=0;
    53             int mm=0;
    54             mm+=60-user[i].minute;
    55             sum=1.0*(60-user[i].minute)*a[user[i].hour];
    56             mm+=user[i+1].minute;
    57             sum+=1.0*user[i+1].minute*a[user[i+1].hour];
    58             user[i].hour++;
    59             for(int j=user[i].hour;j<24;++j)
    60                 sum+=1.0*a[j]*60,mm+=60;
    61             for(int j=0;j<user[i+1].hour;++j)
    62                 sum+=1.0*a[j]*60,mm+=60;
    63             mm+=(user[i+1].day-user[i].day-1)*1440;
    64             sum+=1.0*(user[i+1].day-user[i].day-1)*all*60;
    65             sum/=100.0;
    66             printf("%d $%.2f
    ",mm,sum);
    67             mp[user[i].name]+=sum;
    68             ++i;
    69         }
    70     }
    71     return 0;
    72 }
    保持热爱 不懈努力 不试试看怎么知道会失败呢(划掉) 世上无难事 只要肯放弃(划掉)
  • 相关阅读:
    有效获取状态栏(StatusBar)高度
    各种数据库连接
    Spring AOP 原理
    Spring ioc 原理
    转载的别人的ajax跨域解决方法
    如何监听input的脚本赋值
    JAVA之Socket编程
    JAVA中的多线程
    JAVA文件操作
    实验三 kali下metasploit的漏洞攻击实践
  • 原文地址:https://www.cnblogs.com/ldudxy/p/11281732.html
Copyright © 2011-2022 走看看