//
// 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