-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path1016.cpp
110 lines (107 loc) · 2.69 KB
/
1016.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
//
// 1016.cpp
// 算法
//
// Created by 王怡凡 on 2017/5/27.
// Copyright © 2017年 王怡凡. All rights reserved.
//
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn = 1100;
int toll[25];
struct Record {
char name[21];
int month, dd,hh,mm;
bool status;
}rec[maxn],temp;
bool cmp(Record a, Record b) {
int s = strcmp(a.name,b.name);
if(s!=0) {
return s < 0;
}
if(a.month!=b.month) {
return a.month < b.month;
} else if(a.dd!=b.dd) {
return a.dd<b.dd;
} else if(a.hh!=b.hh) {
return a.hh<b.hh;
} else
return a.mm<b.mm;
}
void get_ans(int on, int off, int& time, int &money) {
temp = rec[on];
while(temp.dd<rec[off].dd||temp.hh<rec[off].hh||temp.mm<rec[off].mm){
time++;
money += toll[temp.hh];
temp.mm++;
if(temp.mm>=60) {
temp.mm = 0;
temp.hh++;
}
if(temp.hh>=24) {
temp.hh = 0;
temp.dd++;
}
}
}
int main() {
int i;
for(i=0;i<24;i++) {
scanf("%d",&toll[i]);
}
int n;
char line[10];
scanf("%d",&n);
for(i=0;i<n;i++) {
scanf("%s",rec[i].name);
scanf("%d:%d:%d:%d",&rec[i].month,&rec[i].dd,&rec[i].hh,&rec[i].mm);
scanf("%s",line);
if(strcmp(line,"on-line")==0) {
rec[i].status = true;
} else {
rec[i].status = false;
}
}
sort(rec,rec+n,cmp);
int on=0, off, next;
while(on<n) {
int needPrint = 0;
next = on;
while(next<n&&strcmp(rec[next].name,rec[on].name)==0) {
if(needPrint==0&&rec[next].status==true) {
needPrint = 1;
} else if(needPrint==1&&rec[next].status==false) {
needPrint = 2;
}
next++;
}
if(needPrint<2) {
on = next;
continue;
}
int AllMoney = 0;
printf("%s %02d\n",rec[on].name, rec[on].month);
while(on<next) {
while(on<next-1&&
!(rec[on].status==true&&rec[on+1].status==false)) {
on++;
}
off = on+1;
if(off==next) {
on = next;
break;
}
printf("%02d:%02d:%02d ",rec[on].dd,rec[on].hh,rec[on].mm);
printf("%02d:%02d:%02d",rec[off].dd,rec[off].hh,rec[off].mm);
int time = 0, money = 0;
get_ans(on, off, time, money);
AllMoney += money;
printf(" %d $%.2f\n",time,money/100.0);
on = off + 1;
}
printf("Total amount: $%.2f\n", AllMoney/100.0);
}
return 0;
}