-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path1016.cpp
More file actions
115 lines (110 loc) · 2.68 KB
/
1016.cpp
File metadata and controls
115 lines (110 loc) · 2.68 KB
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
111
112
113
114
115
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
#include<stdio.h>
using namespace std;
struct Call{
string name;
int month;
int date;
int hour;
int minute;
int total;
string status;
};
int charge[24];
vector<Call> all_calls;
vector<Call> format_calls;
bool compare(Call a, Call b){
if(a.name<b.name)
return 1;
else if(a.name == b.name && a.total <b.total)
return 1;
else
return 0;
}
int chargeByTime(int time){
int hours = time/60;
int minutes = time%60;
int money =0;
int i;
for(i=0;i<hours;i++)
money += charge[i%24]*60;
money += charge[i%24]*minutes;
return money;
}
double calCost(Call s, Call t){
return (double)(chargeByTime(t.total)-chargeByTime(s.total))/100;
}
int calLast(Call s, Call t){
return (t.total - s.total);
}
int main(){
for(int i=0;i<24;i++){
cin>>charge[i];
}
int N;
cin >> N;
for(int i = 0;i<N;i++){
Call c;
cin>>c.name;
cin>>c.month;
getchar();
cin>>c.date;
getchar();
cin>>c.hour;
getchar();
cin>>c.minute;
c.total = c.minute+60*c.hour+24*60*c.date;
cin>>c.status;
all_calls.push_back(c);
}
sort(all_calls.begin(),all_calls.end(),compare);
bool haveonline = false;
string curname;
for(int i = 0;i<all_calls.size();i++){
if(haveonline == false && all_calls[i].status == "on-line"){
format_calls.push_back(all_calls[i]);
haveonline = true;
curname = all_calls[i].name;
}
else if(haveonline == true &&all_calls[i].status == "on-line"){
format_calls.pop_back();
format_calls.push_back(all_calls[i]);
haveonline = true;
curname = all_calls[i].name;
}
else if(haveonline == true && all_calls[i].status == "off-line" && all_calls[i].name == curname){
format_calls.push_back(all_calls[i]);
haveonline = false;
}
}
if((*(format_calls.end()-1)).status == "on-line")
format_calls.pop_back();
double totalcost =0;
curname = " ";
for(int i=0;i<format_calls.size();i+=2){
if(format_calls[i].name != curname)
{
if(curname != " "){
printf("Total amount: $%.2f\n",totalcost);
totalcost = 0;
printf("%s %02d\n",format_calls[i].name.c_str(),format_calls[i].month);
}else{
printf("%s %02d\n",format_calls[i].name.c_str(),format_calls[i].month);
}
curname = format_calls[i].name;
}
printf("%02d:%02d:%02d",format_calls[i].date,format_calls[i].hour,format_calls[i].minute);
printf(" ");
printf("%02d:%02d:%02d",format_calls[i+1].date,format_calls[i+1].hour,format_calls[i+1].minute);
printf(" ");
printf("%d ",calLast(format_calls[i],format_calls[i+1]));
printf("$%.2f\n",calCost(format_calls[i],format_calls[i+1]));
totalcost += calCost(format_calls[i],format_calls[i+1]);
}
printf("Total amount: $%.2f\n",totalcost);
system("pause");
return 0;
}