PAT

    xiaoxiao2021-03-25  133

    // // main.cpp // PAT_1016. Phone Bills // // Created by wjq on 17/4/4. // Copyright © 2017年 wjq. All rights reserved. // #include <iostream> #include <string.h> #include <algorithm> using namespace std; struct customer { char name[25]; int month,day,hour,minute; bool online; }cus[1005]; double charge[24]; int N; void Input() { char temp[50]; for(int i=0;i<24;i++) scanf("%lf",&charge[i]); scanf("%d",&N); for(int i=0;i<N;i++) { scanf("%s",cus[i].name); scanf("%d:%d:%d:%d",&cus[i].month,&cus[i].day,&cus[i].hour,&cus[i].minute); scanf("%s",temp); if(temp[1]=='n') //on-line的第二个字符是n. cus[i].online=true; else cus[i].online=false; } } bool cmp(customer a,customer b) { if(strcmp(a.name,b.name)<0) return true; else if(strcmp(a.name,b.name)==0) { if(a.day<b.day) return true; else if(a.day==b.day) { if(a.hour<b.hour) return true; else if(a.hour==b.hour) return a.minute<b.minute; else return false; } else return false; } else return false; } void ComputeTime(int i,int &time,double &fee) //i表示第i条记录 { int d1=cus[i-1].day,d2=cus[i].day; int h1=cus[i-1].hour,h2=cus[i].hour; int m1=cus[i-1].minute,m2=cus[i].minute; while(d1<d2||h1<h2||m1<m2) { time++; m1++; fee+=charge[h1]; if(m1>=60) { h1++; m1=0; } if(h1>=24) { d1++; h1=0; } } } void Solve() { double allfee=0,count=0; bool match=false; for(int i=1;i<N;i++) { if(strcmp(cus[i].name,cus[i-1].name)==0) //当前记录的上一条记录名字相同 { if(cus[i].online==false&&cus[i-1].online==true) { match=true; //说明有匹配成功的 int time=0; double fee=0; ComputeTime(i,time,fee); allfee+=fee; if(count==0) //保证某个用户的名字和日期只输出一次 { count++; printf("%s d\n",cus[i-1].name,cus[i-1].month); } printf("d:d:d ",cus[i-1].day,cus[i-1].hour,cus[i-1].minute); printf("d:d:d ",cus[i].day,cus[i].hour,cus[i].minute); printf("%d $%.2lf\n",time,fee/100); } } else //当前记录名字和上一条记录名字不同 { if(match==true) //如果有匹配成功的 才会有输出 { printf("Total amount: $%.2lf\n",allfee/100); allfee=0; count=0; match=false; } } if(i==N-1&&match==true) //如果这两句代码,最后一个用户的Total amount不会输出 printf("Total amount: $%.2lf\n",allfee/100); } } int main() { Input(); sort(cus,cus+N,cmp); Solve(); return 0; }

    做了好几个小时,终于A了,还是看了网上的思路,题意是一定有能匹配的,但是不一定有匹配成功的,匹配不成功的话这用户的信息是不可以输出的..醉了..

    ...只能怪自己思维不严谨.....连续几道题都是因为读题不够仔细导致不能AC,心累..今天先不做了,明天好好读英文!

    转载请注明原文地址: https://ju.6miu.com/read-5942.html

    最新回复(0)