//1016. Phone Bills (25)
//accept
#include <iostream>
#include <string.h>
#include <algorithm>
using namespace std;
typedef struct
{
char name[21];
int month;
int day;
int hour;
int minute;
bool state;//state = true: on-line false: off-line
}Record;
bool cmp(Record r1, Record r2)
{
if (strcmp(r1.name, r2.name) == 0)
{
if (r1.month == r2.month)
{
if (r1.day == r2.day)
{
if (r1.hour == r2.hour)
{
return r1.minute < r2.minute;
}
return r1.hour < r2.hour;
}
return r1.day < r2.day;
}
return r1.month < r2.month;
}
return (strcmp(r1.name, r2.name) < 0);
}
int main()
{
Record r[1005];
int toll[24];
int tolladd = 0;
int i;
for (i = 0;i<24;i++)
{
scanf("%d", &toll[i]);
tolladd += toll[i];
}
int n;
scanf("%d", &n);
char tmp[8];
for (i = 0;i<n;i++)
{
scanf("%s %d:%d:%d:%d", &r[i].name, &r[i].month, &r[i].day, &r[i].hour, &r[i].minute);
scanf("%s", &tmp);
if (strncmp(tmp, "on-line", 7) == 0)
{
r[i].state = true;
}
else
r[i].state = false;
}
sort(r, r+n, cmp);
Record start = r[0];
int j;
int minute;
float money;
float total = 0;
bool flag = false;
for (i = 1;i<n;i++)
{
if (strcmp(r[i].name, start.name) == 0)
{
if (start.state == true)
{
if (r[i].state == false && r[i].month == start.month && r[i].day >= start.day)
{
//cal
if (flag == false)
{
printf("%s %02d\n",r[i].name, r[i].month);
flag = true;
}
printf("%02d:%02d:%02d %02d:%02d:%02d", start.day, start.hour, start.minute, r[i].day, r[i].hour, r[i].minute);
minute = r[i].day * 24 * 60 + r[i].hour * 60 + r[i].minute - start.day * 24 * 60 -start.hour* 60 - start.minute;
cout << " " <<minute;
money = 0;
if (r[i].day == start.day)
{
for (j = start.hour; j<r[i].hour;j++)
{
money += toll[j] * 60;
}
money -= toll[start.hour]*start.minute;
money += toll[r[i].hour]*r[i].minute;
}
else
{
for (j = start.day;j<r[i].day;j++)
{
money += tolladd * 60;
}
for (j = 0;j<start.hour;j++)
{
money -= (toll[j]*60);
}
money -= toll[start.hour]*start.minute;
for (j = 0;j<r[i].hour; j++)
{
money += (toll[j]*60);
}
money += (toll[r[i].hour] * r[i].minute);
}
money = money / 100.0;
total+=money;
printf(" $%.2f\n", money);
if (strcmp(start.name, r[i+1].name) != 0 && total > 0)
{
printf("Total amount: $%.2f\n", total);
flag = false;
total = 0;
}
start = r[i+1];
i++;
}
else
{
if (strcmp(start.name, r[i].name) != 0 && total > 0)
{
printf("Total amount: $%.2f\n", total);
flag = false;
total = 0;
}
start = r[i];
continue;
}
}
else
{
if (strcmp(start.name, r[i].name) != 0 && total > 0)
{
flag = false;
printf("Total amount: $%.2f\n", total);
total = 0;
}
start = r[i];
}
}
else
{
if (total > 0)
{
flag = false;
printf("Total amount: $%.2f\n", total);
total = 0;
}
start = r[i];
}
}
if (total > 0)
{
printf("Total amount: $%.2f\n", total);
}
return 0;
}
PAT 1016. Phone Bills (25)
最新推荐文章于 2021-03-24 10:30:10 发布