#include <bits/stdc++.h>
using namespace std;
const int N=1010;//通话记录数
int cost[24];//每小时的费用(分/分钟)
int n;
struct User{
string name;
set<string> onLine;
set<string> offLine;
vector<pair<string,string>> times;
}user[N];
map<string,int> stringToInt;
map<int,string> intToString;
bool cmp(User a,User b){
return a.name<b.name;
}
bool cmpTime(pair<string,string> a,pair<string,string> b){
return a.first<b.first;
}
int main(){
for(int i=0;i<24;i++){
cin>>cost[i];
}
cin>>n;
int num=0;
for(int i=0;i<n;i++){
string name,time,type;
cin>>name>>time>>type;
auto it=stringToInt.find(name);
if(it==stringToInt.end()){
stringToInt[name]=num;
intToString[num]=name;
num++;
}
int id=stringToInt[name];
user[id].name=name;
user[id].times.push_back({time,type});
}
sort(user,user+num,cmp);
for(int i=0;i<num;i++){
vector<pair<string,string>> vi=user[i].times;
sort(vi.begin(),vi.end(),cmpTime);
for(int j=0;j<vi.size()-1;j++){
if(vi[j].second=="on-line"&&vi[j+1].second=="off-line"){
user[i].onLine.insert(vi[j].first);
user[i].offLine.insert(vi[++j].first);
}
}
auto it1=user[i].onLine.begin(),it2=user[i].offLine.begin();
double bill=0;
while(it1!=user[i].onLine.end()&&it2!=user[i].offLine.end()){
if(bill==0) cout<<user[i].name<<' '<<(*it1).substr(0,2)<<endl;
string on=*it1,off=*it2;
on=on.substr(3,on.size()-3);
off=off.substr(3,off.size()-3);
cout<<on<<' '<<off;
int d1=atoi(on.substr(0,2).data()),h1=atoi(on.substr(3,2).data()),m1=atoi(on.substr(6,2).data());
int d2=atoi(off.substr(0,2).data()),h2=atoi(off.substr(3,2).data()),m2=atoi(off.substr(6,2).data());
double sum=0;
int sum1=d1*24*60+h1*60+m1;
int sum2=d2*24*60+h2*60+m2;
int minute=sum2-sum1;
int d=d1,h=h1,m=m1;
while(sum1<sum2){
if(m==60){
h+=1;
m=0;
}
if(h==24){
d+=1;
h=0;
}
m+=1;
sum+=cost[h];
sum1+=1;
}
bill+=sum;
printf(" %d $%.2f\n",minute,sum/100);
it1++;
it2++;
}
if(bill!=0){
printf("Total amount: $%.2f\n",bill/100);
}
}
return 0;
}
pat甲级1016
最新推荐文章于 2024-09-13 14:59:21 发布