很难的模拟题
看题目戳这
排序就算了吧。。。
这题和模拟比起来
排序算什么
我用了一个玄学的map
我自己都不相信他起作用了
这个map很关键
省了很多事
代码如下
下面附了两组数据
你们可以试一下
还有这个公式挺难推的
#include<bits/stdc++.h>
using namespace std;
struct node{
char name[25];
int mon,day,h,m;
int op;
}p[1005],pai[1005];
int fee[25];
map<string,vector<int> > m;
bool cmp(node x,node y){
if(x.day!=y.day){
return x.day<y.day;
}else {
if(x.h!=y.h){
return x.h<y.h;
}else {
if(x.m!=y.m){
return x.m<y.m;
}
}
}
return 1;
}
int main(){
int n,cnt=0;
char op[10];
for(int i=0;i<24;i++){
scanf("%d",&fee[i]);
}
scanf("%d",&n);
getchar();
for(int i=0;i<n;i++){
scanf("%s%d:%d:%d:%d%s",p[i].name,&p[i].mon,&p[i].day,&p[i].h,&p[i].m,op);
if(op[1]=='n'){
p[i].op=1;
}else {
p[i].op=0;
}
m[p[i].name].push_back(i);
}
for(map<string,vector<int> >::iterator it=m.begin();it!=m.end();it++){
cnt=0;
int zans=0;
bool flag=0;
for(int i=0;i<(it->second).size();i++){
pai[cnt++]=p[(it->second)[i]];
}
sort(pai,pai+cnt,cmp);
for(int i=1;i<cnt;i++){
int ans=0,time=0;
if(pai[i].op==0&&pai[i-1].op==1){
if(!flag){
printf("%s %02d\n",pai[0].name,pai[0].mon);
flag=1;
}
time+=60-pai[i-1].m;
time+=(23-pai[i-1].h)*60;
time+=1440*(pai[i].day-pai[i-1].day-1);
time+=pai[i].h*60;
time+=pai[i].m;
ans+=(60-pai[i-1].m)*fee[pai[i-1].h];
for(int j=pai[i-1].h+1;j<24;j++){
ans+=fee[j]*60;
}
for(int j=pai[i-1].day+1;j<pai[i].day;j++){
for(int k=0;k<24;k++){
ans+=fee[k]*60;
}
}
if(pai[i-1].day==pai[i].day){
for(int k=0;k<24;k++){
ans-=fee[k]*60;
}
}
for(int j=0;j<pai[i].h;j++){
ans+=fee[j]*60;
}
ans+=fee[pai[i].h]*pai[i].m;
zans+=ans;
printf("%02d:%02d:%02d %02d:%02d:%02d %d $%.2f\n",pai[i-1].day,pai[i-1].h,pai[i-1].m,pai[i].day,pai[i].h,pai[i].m,time,(double)ans/100.0);
i++;
}
}
if(flag)
printf("Total amount: $%.2f\n",(double)zans/100.0);
}
return 0;
}
/*
10 10 10 10 10 10 20 20 20 15 15 15 15 15 15 15 20 30 20 15 15 10 10 10
4
aaa 01:01:01:03 on-line
aaa 01:02:00:01 on-line
aaa 01:05:02:24 on-line
aaa 01:04:23:59 off-line
10 10 10 10 10 10 20 20 20 15 15 15 15 15 15 15 20 30 20 15 15 10 10 10
5
aaa 01:01:01:03 on
aaa 01:02:00:01 on
CYLL 01:28:15:41 on
aaa 01:05:02:24 on
aaa 01:02:00:02 off
*/