qq_51801942 2021-05-19 17:31
浏览 20

pat的phone bill 一小时做题十小时找bug我快疯了有没有哪位大神救救孩子

 

#include<bits/stdc++.h>
using namespace std;
    map<string,set<int> > on;
    map<string,set<int> > off;    
    int month;
    int wholeday=0;
    int money[24];
    int calculatemoney(int a,int b){
    int sumnumber=0;
    int day1=a/(24*60);
    int day2=b/(24*60);
    int hour1=a%(24*60)/60;
    int hour2=b%(24*60)/60;
    int minute1=a%(24*60)%60;
    int minute2=b%(24*60)%60;
    if(day1==day2)
    {
    for(int i=hour1;i<=hour2;i++)
    sumnumber+=60*money[i];
    sumnumber=sumnumber-minute1*money[hour1]-(60-minute2)*money[hour2];
}
if(day1<day2)
{int day=day2-day1-1;
sumnumber+=wholeday*day;
for(int i=hour1;i<24;i++)
sumnumber+=60*money[i];
for(int i=0;i<hour2;i++)
sumnumber+=60*money[i];
sumnumber-=money[hour1]*minute1;
sumnumber+=money[hour2]*minute2;

    
}
  return sumnumber;
}

 

int main()
{

    for(int i=0;i<24;i++)
    
    {
    cin>>money[i];
    wholeday+=money[i]*60;
}
    int number;
    cin>>number;

    for(int i=0;i<number;i++)
    {string name;
    int m;
    int d;
    int h;
    int min;
    cin>>name;
    
    scanf("%d:%d:%d:%d",&m,&d,&h,&min);
    month=m;
     string of;
    cin>>of;
    if(of=="on-line")
    on[name].insert(24*60*d+60*h+min);
    else
    off[name].insert(24*60*d+60*h+min);
    }
    for(map<string,set<int> >::iterator index1=on.begin();index1!=on.end();index1++)
    {double summoney=0;
        map<string,set<int> >::iterator index2;
        index2=off.find(index1->first);
     
        set<int>::iterator set1=index1->second.begin();
      set<int>::iterator set2;
     if(index2!=off.end())
        set2=index2->second.begin();
    else continue;    
  int truenumber=0;
     while(set1!=index1->second.end()&&set2!=index2->second.end())
        
        {
        if(*set1>*set2)
        {
        while(*set1>*set2&&set1!=index1->second.end()&&set2!=index2->second.end())
        set2++;
        if(set2==index2->second.end())
        {
         break;
        }
           
       
        truenumber++;
              if(truenumber==1)
            { cout<<index1->first<<" ";
        printf("%02d\n",month);
            }
        

        
printf("%02d:%02d:%02d %02d:%02d:%02d %d ",*set1/(24*60),*set1%(24*60)/60,*set1%(24*60)%60,*set2/(24*60),*set2%(24*60)/60,*set2%(24*60)%60,*set2-*set1);
        double temp=calculatemoney(*set1,*set2);
        summoney+=temp/100.0;
        printf("$%.2f\n",temp/100.0);
    set2++;
        set1++;
    
    

        
}        
    else    
    {
        while(*set1<*set2&&set1!=index1->second.end()&&set2!=index2->second.end())
        set1++;
        set1--;

        {truenumber++;
              if(truenumber==1)
            { cout<<index1->first<<" ";
                printf("%02d\n",month);
            }
        }
 
        
        printf("%02d:%02d:%02d %02d:%02d:%02d %d ",*set1/(24*60),*set1%(24*60)/60,*set1%(24*60)%60,*set2/(24*60),*set2%(24*60)/60,*set2%(24*60)%60,*set2-*set1);
        double temp=calculatemoney(*set1,*set2);
        summoney+=temp/100.0;
        printf("$%.2f\n",temp/100.0);
        set2++;
        set1++;

    }
}
     if(truenumber>0)
printf("Total amount: $%.2f\n",summoney);
}return 0;
}
 

  • 写回答

0条回答 默认 最新

      报告相同问题?

      相关推荐 更多相似问题

      悬赏问题

      • ¥15 我想用matlab处理spm8和vbm8的数据分析,用于分析nii文件各种脑区的图像,但是在第一步使用estimate and write中就出错,如何解决?
      • ¥15 能否给一个SOCKET通转USB通信的安卓程序代码
      • ¥15 前端js跨域请求问题
      • ¥15 C++SMTP服务器
      • ¥15 为什么52单片机测温实物LCD不显示数值?(c语言)
      • ¥30 《红色警戒2》最新mod《泰矿危机2》修改敌方单位阵营易语言
      • ¥15 C语言频闪问题与时间显示
      • ¥15 利用funguild进行大型真菌生态型划分
      • ¥20 急!希望找到这个程序的作者help
      • ¥20 windows系统文件缺失去