• A1016 | 磨人的大模拟


    这题写得头晕……明天我再评价

    #include <stdio.h>
    #include <memory.h>
    #include <math.h>
    #include <string>
    #include <vector>
    #include <set>
    #include <stack>
    #include <queue>
    #include <algorithm>
    #include <map>
    
    
    #define I scanf
    #define OL puts
    #define O printf
    #define F(a,b,c) for(a=b;a<c;a++)
    #define FF(a,b) for(a=0;a<b;a++)
    #define FG(a,b) for(a=b-1;a>=0;a--)
    #define LEN 1010
    #define MAX 0x06FFFFFF
    #define V vector<int>
    
    using namespace std;
    
    set<string> printTitle;
    
    typedef struct Record{
        string name;
        int month,dd,hh,mm;
        int isOn;
        Record(){}
        Record(const Record& o){
            name=o.name;month=o.month;dd=o.dd;hh=o.hh;mm=o.mm;isOn=o.isOn;
        }
    }Record;
    
    Record info[LEN];
    int rate[24];
    int one_day_bill=0;
    
    void init_one_day_bill(){
        int i;
        FF(i,24){
            one_day_bill+=60*rate[i];
        }
    }
    
    bool cmp(Record a,Record b){
        /*
        if(a.name<b.name) return true;
        else if(a.mouth<b.mouth) return true;
        else if(a.dd<b.dd) return true;
        else if(a.hh<b.hh) return true;
        else if(a.mm<b.mm) return true;
        return false;*/
        if(a.name!=b.name) return a.name<b.name;
        else 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 diff(Record a,Record b,int& minute,int& money){
    //    minute=b.mm-a.mm+(b.hh-a.hh)*60+(b.dd-a.dd)*24*60;
    //    int i;
    //    money=0;
    //    if(a.dd!=b.dd)
    //        money+=(b.dd-a.dd)*one_day_bill;
    //    if(a.hh==b.hh) money=minute*rate[a.hh];
    //    else{
    //        for(i=a.hh;i<=b.hh;i++){
    //            if(i==a.hh) money+=(60-a.mm)*rate[i];
    //            else if(i==b.hh) money+=(b.mm)*rate[i];
    //            else money+=(60)*rate[i];
    //        }
    //    }
        Record tmp=a;
        minute=0;money=0;
        while(tmp.dd<b.dd || tmp.hh< b.hh || tmp.mm < b.mm){
            minute++;
            money+=rate[tmp.hh];
            tmp.mm++;
            if(tmp.mm>=60){
                tmp.mm=0;
                tmp.hh++;
            }
            if(tmp.hh>=24){
                tmp.hh=0;
                tmp.dd++;
            }
        }
    }
    
    int main(){
        freopen("d:/input/A1016.txt","r",stdin);
        int n,i;
        FF(i,24){
            scanf("%d",&rate[i]);
        }
        init_one_day_bill();
        scanf("%d",&n);
        FF(i,n){
            char buffer[100];
            I("%s",buffer);
            I("%d:%d:%d:%d",&info[i].month,&info[i].dd,&info[i].hh,&info[i].mm);
            info[i].name=buffer;
            I("%s",buffer);
            if(string(buffer)=="on-line") info[i].isOn=1;
            else info[i].isOn=0;
        }
        sort(info,info+n,cmp);
    
        int on=0,off,next;
        while(on<n){
            int needPrint=0;
            next=on;
            while(next<n && info[next].name==info[on].name){
                if(needPrint==0 && info[next].isOn){
                    needPrint=1;
                }else if(needPrint==1 && info[next].isOn==0){
                    needPrint=2;
                }
                next++;
            }
    //        printf("%d
    ",needPrint);
            if(needPrint<2){
                on=next;
                continue;
            }
            int allMoney=0;
            O("%s %02d
    ",info[on].name.c_str(),info[on].month);
            while(on<next){
                while(on<next-1 && !(info[on].isOn&&info[on+1].isOn==0)) on++;
                off=on+1;
                if(off==next){
                    on=next;
                    break;
                }
                Record a=info[on],b=info[off];
                int minute;
                int money;
                diff(a,b,minute,money);
                allMoney+=money;
                O("%02d:%02d:%02d %02d:%02d:%02d %d $%.2lf
    ",a.dd,a.hh,a.mm,b.dd,b.hh,b.mm,minute,money/100.);
                on=off+1;
            }
            O("Total amount: $%.2lf
    ",allMoney/100.);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    Python Excel 合并 去重
    前端 导出为Excel 数据源为table表格 table中的字段7-1变成了7月1号解决
    SpreadJS 基本信息
    Python 模拟向四面八方拖动
    Python 淘宝联盟-佣金设置 批量设置佣金和服务费
    Python 模拟鼠标滚轮 滚动页面
    评审恩仇录——我为什么愿意执行代码评审
    浅谈专有云MQ存储空间的清理机制
    三只松鼠:阿里云数据中台基座上的多渠道、多业态生长
    谈AK管理之基础篇
  • 原文地址:https://www.cnblogs.com/TQCAI/p/8284117.html
Copyright © 2020-2023  润新知