2015湖南集训DAY8——梦工厂

梦工厂 (yume.cpp/c/pas)

Time Limit: 1 s Memory Limit: 128 M

问题描述

「有时候用烂了的名字也会别有深意」

——摘自EN 语录

“这里是制造快乐,编织幸福的梦工厂!才不是你们想的什么奇怪的工厂呢!哼!”

这是你来到这个奇妙的地方所听到的第一句话,竟然还是一头身长三米的狗熊发出来的。

一开始看到梦工厂这块牌匾时,你心里想的是什么呢?如果真的是洋溢着青涩而纯洁的

梦想,那就太棒了!

初来乍到,狗熊先生决定给你先大致地讲解一下工厂的运作过程。

“要知道,我们这里可是梦工厂,为小孩子们生产快乐与幸福的梦工厂!”,狗熊先生

不断地重复着梦工厂的定义。尽管脑袋晕晕乎乎的,但是你最终还是知道了,这个工厂是专

门生产快乐与幸福这样的情绪的,用来送给那些闷闷不乐或者是受到了挫折的小孩子,让他

们重展笑颜。

“但是,我们遇到了一个问题…”,狗熊先生的语气低沉了下来。

“最近不开心的小孩子越来越多了,我们需要生产的快乐也越来越多了,但是我们的生

产线是由n道工序构成,每个单位时间里每道工序最多只能容纳一个快乐。当一个快乐被

一个工序加工完后,会立刻传到下一道工序。”

“然后呢,怎么了,这不挺好的吗?”,你好奇道。

“好什么呀!快乐会被强制传到下一道工序,如果下一道工序里也有一个快乐的话,那

就会爆炸!爆炸懂吗!瞬间爆炸!”,狗熊先生语气高昂了起来。

“之前我们为了防止爆炸,都是等一个快乐所有工序生产好之后才开始生产另一个快乐

的。但是我想了几百年,觉得可以早点开始生产的,只要保证它们不会在同一时刻出现在同

一道工序上就行了。”,狗熊先生骄傲地挺起胸膛,有点可怕。

“顺便告诉你吧!每道工序有个复杂指数Ti,一个快乐有个快乐指数Fj,第j个快乐在

第i道工序中要消耗的时间是Fj?Ti,而且快乐必须按顺序生产。”

“既然我什么都告诉你了,嘿嘿”,狗熊先生露出了狰狞的笑容,食肉的

“你就帮我安排一下怎么生产最好吧,告诉我最短的全部生产完的时间就

哦,不然就拿你打牙祭!”

这是梦工厂吗?是梦吧?

输入格式

第一行两个整数n和m表示工序道数、需生产的快乐个数。

第二行n个整数,分别表示复杂指数Ti。

第三行m个整数,分别表示快乐指数Fi。

输出格式

一个正整数为最短时间。

Sample Input

3 3

2

1

1

2

1

1

Sample Output

11

题解与吐槽

南雅的这题面。。。说人话好不

花了快2个小时写这题暴力,又两个小时调一个傻逼凸包。

感觉终于有点明白斜率优化是啥东西了。

我们先把Ti的前缀和求出来,记做sumi,然后维护把前i?1个物品全部处理完的时间。然后对于第i件物品,我们要使它无论如何不能与前一个同时出现在一个阶段,所以我们可以求出sumj?fi?1?sumj?1?fi的最大值,并以这个值减去节省下来的时间。

上面那个是暴力,然后我们发现可以把那个式子转化一下,就变成了经典的斜率优化问题。我们维护(sumi?1,sumi)形成的上凸包,然后每次询问时二分查找即可。

下面上代码

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef double db;

const int inf=0x3f3f3f3f;

int getint()
{
    char c=getchar();
    int f=1,g=0;
    while(c>‘9‘ || c<‘0‘){if(c==‘-‘)f=-1;c=getchar();}
    while(c<=‘9‘ && c>=‘0‘)g=(g<<3)+(g<<1)+c-‘0‘,c=getchar();
    return f*g;
}

const int maxn=2000005;

int top;
int sum[maxn];
int f[maxn];
int t[maxn];
int n,m;

db slp[maxn];
ll ans;
int q[maxn];

db slope(int j,int k)
{
    db temp1=(db)sum[j-1]-(db)sum[k-1];
    db temp2=(db)sum[j]-(db)sum[k];
    return temp1/temp2;
}

int findpos(db x)
{
    int l=1;
    int r=top-1;
    if(x<slp[l])return q[1];
    if(x>slp[r])return q[top];
    while(l<r)
    {
        int mid=(l+r)>>1;
        if(slp[mid]<x)
        {
            l=mid+1;
        }
        else r=mid;
    }
    return q[l];
}

int main()
{
    freopen("yume.in","r",stdin);
    freopen("yume.out","w",stdout);

    n=getint();
    m=getint();

    for(int i=1;i<=n;i++)
    {
        t[i]=getint();
        sum[i]=sum[i-1]+t[i];
    }

    for(int i=1;i<=m;i++)
    {
        f[i]=getint();
    }

    for(int i=1;i<=n;i++)
    {
        while(top>1 && slp[top-1]>=slope(q[top],i))
        {
            top--;
        }
        q[++top]=i;
        slp[top-1]=slope(q[top],q[top-1]);
    }
    for(int i=1;i<=m;i++)
    {
        db tem=(db)f[i-1]/(db)f[i];
        int temp=findpos(tem);

        ll mx=(ll)sum[temp]*(ll)f[i-1]-(ll)sum[temp-1]*(ll)f[i];

        mx-=(ll)sum[n]*((ll)f[i-1]-(ll)f[i]);
        mx=max(0ll,mx);

        ans+=mx;
    }
    printf("%lld\n",ans);

    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-25 14:44:19

2015湖南集训DAY8——梦工厂的相关文章

DT大数据梦工厂,插上大数据的翅膀

2015.7.9 DT大数据梦工厂scala 深入浅出实战经典 再也没有这样好的视频了,只要每天看一点,你就会有一点收获,讲的并不只是代码,而且还有一些看待事物的哲理,通过真实场景来思考代码,这是这个视频的精华所在,要想学好大数据,并没有什么可犹豫的,直接看就可以了,你的成功不在于你努力了多少,而是你做了成功的事.shihttp://pan.baidu.com/s/1kTotMQz 今天先讲一下File这个传输的过程吧,自己敲了一下代码试试,这是我通过看视频,散发出的一些正能量,绝对刚出炉,还热

底层战详解使用Java开发Spark程序(DT大数据梦工厂)

Scala开发Spark很多,为什么还要用Java开发原因:1.一般Spark作为数据处理引擎,一般会跟IT其它系统配合,现在业界里面处于霸主地位的是Java,有利于团队的组建,易于移交:2.Scala学习角度讲,比Java难.找Scala的高手比Java难,项目的维护和二次开发比较困难:3.很多人员有Java的基础,确保对Scala不是很熟悉的人可以编写课程中的案例预测:2016年Spark取代Map Reduce,拯救HadoopHadoop+Spark = A winning combat

DT大数据 梦工厂57讲

今日[DT大数据梦工厂视频]<第57讲:Scala中Dependency Injection实战详解> 土豆:http://www.tudou.com/programs/view/5LnLNDBKvi8/ 百度网盘:http://pan.baidu.com/s/1c0no8yk (DT大数据梦工厂scala的所有视频.PPT和代码在百度云盘的链接地址:http://pan.baidu.com/share/home?uk=4013289088#category/type=0&qq-pf-

DT大数据梦工厂免费实战大数据视频全集 分享

接触大数据有几年,以前一直都是对hadoop的使用.相比于日新月异的前端技术,我还是比较喜欢大数据--这个已经被热炒多年的课题,也相信从事大数据方面的技术研究是IT从业者的一条光明坦途. 2010年hadoop开始进入我的视野, 不断自学,使用,感谢hadoop国内还是有很多书籍.去年开始各大社区开始讨论spark,也开始学习scala语言,断断续续没有坚持,没多久也会忘掉.今年初看到了王老师的<Spark亚太研究院Spark公益大讲堂>视频,一些实时性需求在工作中出现让我不得不对比hadoo

DT大数据梦工厂 第72,73讲

王家林亲授<DT大数据梦工厂>大数据实战视频“Scala深入浅出实战经典”视频.音频和PPT下载!第72讲:Scala界面事件处理编程实战详解百度云:http://pan.baidu.com/s/1qWsq6Jy腾讯微云:http://url.cn/g6En3l360云盘:http://yunpan.cn/cchw9EZAp2rKd 访问密码 05d1本节王老师讲了scala界面的事件处理就是当用户操作一个行为,GUI将做出一个反应.比如点击一个按钮事件.def top=new MainFra

DT大数据梦工厂 第63,64,65讲

王家林亲授<DT大数据梦工厂>大数据实战视频“Scala深入浅出实战经典”视频.音频和PPT下载!第63讲:Scala中隐式类代码实战详解百度云:http://pan.baidu.com/s/1o6wxJdS腾讯微云:http://url.cn/TfOJqr360云盘:http://yunpan.cn/cckajtapNGT9z 访问密码 369d本节王老师讲了隐式类.其作用就是把转换后的类放在一个作用域中,消除了之前的隐式转换方法.object Context{ implicit class

DT大数据 梦工厂53讲

王家林亲授<DT大数据梦工厂>大数据实战视频"Scala深入浅出实战经典"视频.音频和PPT下载!第53讲:Scala中结构类型实战详解 百度云盘:http://pan.baidu.com/s/1ntEGt4X 腾讯微云:http://url.cn/frfFQl 360云盘:http://yunpan.cn/cc3SKdVt8dFwa  访问密码 6ae4 第53讲 王老师讲了结构类型,结构类型表明了一个方法中的参数被一个结构所限定,只要符合一种结构,就可以作为参数传入这个

DT大数据 梦工厂52讲

王家林亲授<DT大数据梦工厂>大数据实战视频"Scala深入浅出实战经典"视频.音频和PPT下载!第52讲:Scala中路径依赖代码实战详解 百度云:http://pan.baidu.com/s/1gdES4hX 360云盘:http://yunpan.cn/ccHXX2Wkrrrt4  访问密码 c489 腾讯微云:http://url.cn/VV5kx5 本节王老师讲了内部类同java的区别.scala中的内部类是用外部类的实例创建的,只和外部类的实例相关,不同的实例创

2015湖南湘潭 D

2015湖南湘潭第七届大学生程序设计比赛 D题 Fraction Accepted : 133   Submit : 892 Time Limit : 1000 MS   Memory Limit : 65536 KB Fraction Problem Description: Everyone has silly periods, especially for RenShengGe. It's a sunny day, no one knows what happened to RenShen