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\n",needPrint);
        if(needPrint<2){
            on=next;
            continue;
        }
        int allMoney=0;
        O("%s %02d\n",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\n",a.dd,a.hh,a.mm,b.dd,b.hh,b.mm,minute,money/100.);
            on=off+1;
        }
        O("Total amount: $%.2lf\n",allMoney/100.);
    }
    return 0;
}

原文地址:https://www.cnblogs.com/TQCAI/p/8284117.html

时间: 2024-08-03 16:53:08

A1016 | 磨人的大模拟的相关文章

大模拟祭

考试的前一天晚上我还在和$letong$说,我以后晚上再颓就去打模拟,然后就考了个大模拟 我比较$sb$,各种情况全分开了,没怎么压行,打了$1000$行整,$30$多$k$,妈妈再也不怕我打不出来猪国杀了 1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 using namespace std; 5 int n,len,Std; 6 int b[5]; 7 char s[20],ss[20];

AC日记——神奇的幻方 洛谷 P2615(大模拟)

题目描述 幻方是一种很神奇的N*N矩阵:它由数字1,2,3,……,N*N构成,且每行.每列及两条对角线上的数字之和都相同. 当N为奇数时,我们可以通过以下方法构建一个幻方: 首先将1写在第一行的中间. 之后,按如下方式从小到大依次填写每个数K(K=2,3,…,N*N): 1.若(K−1)在第一行但不在最后一列,则将K填在最后一行,(K−1)所在列的右一列: 2.若(K−1)在最后一列但不在第一行,则将K填在第一列,(K−1)所在行的上一行: 3.若(K−1)在第一行最后一列,则将K填在(K−1)

URAL 1715. Another Ball Killer (大模拟)

1715. Another Ball Killer Time limit: 2.0 second Memory limit: 64 MB Contestants often wonder what jury members do during a contest. Someone thinks that they spend all the contest fixing bugs in tests. Others say that the jury members watch the conte

POJ 1835 大模拟

宇航员 #include<iostream> #include<cstdio> #include<string> #include<cstring> #define maxn 10010 using namespace std; int a[7],temp[7]; char str[10]; void solve(int str2[],int str3[]) { if(strcmp(str,"forward")==0)//方向不变 { s

IT大事件网-IT人的大事件http://www.itd4j.com,一个不错的IT网站,IT人必须关注啊!

IT大事件--IT人的事.itd4j.com,www.itd4j.com,分享IT界最新的IT大会--互联网大会,技术大会.了解最新技术动态资讯,学习最新.最热门的技术文章.可以关注:IT大会,IT互联网,架构师,网站,电商,移动,安全,大数据,云计算,开发者,开发,网络,开源,笔试,面试.挨踢人关IT事,技术人干技术事. IT大事件,itd4j.com,www.itd4j.com,IT大会,IT互联网,架构师,网站,电商,移动,安全,大数据,云计算,IT,开发,网络,开源,笔试,面试,程序员,

如何征服“支付”这个磨人的小妖精

此文章以致敬曾经斡旋或者当前还僵持在支付环节的难友们!我们已经走出来了,我们也愿意搭把手拉你出泥潭,让你不再错过晚饭妈妈做的红烧肉! 无论是资深码农还是入行菜鸟,无论是产品经理还是老板说要支付功能,似乎没有人可以说NO,满大街都是支付,别人都实现了呢,你说NO,你得和自己及公司有多大的仇怨啊,于是程序猿们动作神速,脑洞大开,忙不迭的寻找解决方案. 步1)首先当然是直奔官网而去了,你去得多了,早 也记住了吧,这里就不多余了.哇,官网上东西也太丰富了:新的,旧的,对的,错的,简单的,高深的,就是偏偏

揭秘微信WXID爆粉/手机号提取WXID/协议无限加人9大骗局

?最近两年,微信WXID爆粉一直比较流行,当然了很多企业不知道什么是wxid,更不清楚V1V2数据的来源是什么,甚至从来没听说过所谓的62数据.唯一听说的就是看到了别人爆粉的数量庞大,看着其他公司一夜之间怎么就拥有了几万微信好友.于是乎传统企业的老总们就开始盲目投入,加入了微信wxid爆粉微信营销的领域,今天无极哥不跟大家讲理论,只是通过这篇文章来告诉那些小白用户一个爆粉需要经历的流程以及你需要花费的资金,如果小企业或者传统企业成本上无法接受,交流Q3272-76-53-85请务必不要盲目进入微

为什么这么多人学习大数据?新手该如何上手大数据?

目前大数据和人工智能作为两大热门方向,不仅仅国家在政策上进行支持,同时国内以百度,阿里为首的知名互联网企业也正在积极的布局大数据和人工智能. 自 2015 年以来,中国的人工智能政策密集出台,这也意味着,在全球竞争的背景下,人工智能已经上升为国家意志. 而且最近首部高中AI教材发布,标志着AI已经正式进入了高中课堂中,从这边我们可以看到人工智能的前景. 而和人工智能作为一大热门方向的大数据,目前也是前景广阔. 在2017年国家同样也陆续发布了多个大数据相关的政策,同时目前在贵州,内蒙,西安等多个

大模拟

工具人的自觉 尽量在对的前提下加快速度吧 也稍微总结下容易粗心的地方,慢慢补 计蒜客T42401 ($Poker\ Game$,$2019ICPC$南京) 一些调试中发现的错误: 1. 把第一次翻开的community card数量当成$2$(应该为$3$)→ 进而影响第$3,4$人在flop-betting时的正确性 2. 一开始没注意到只剩一人时就胜出 → 需要在每一轮都判断 3. 没注意到发牌可以不全发完 4. 看错第$1$人在flop-betting中call的条件 5. Three o