zoukankan      html  css  js  c++  java
  • 模拟99

    T1.陶陶摘苹果

      线段树维护单调栈模板题。

    T2.开心的金明

      在每个月,生产一台电脑的代价是固定的,原料费用+造电脑费用+把电脑存到当前月费用,原料可以从任何一个月运过来,因此原料费用可以对前缀+储存费用取min,最后一个可以用类似延迟标记的方法得到,于是我们就有了在当前月,在之前某个月生产电脑的费用。

      显然取最小的是最优的。考虑如何保证合法,当月的生产限制和当月到现在的仓库容量是限制,第一个往堆里塞的时候存一下就好,第二个似乎可以在每个月弹掉不合法的。然而我没有这么打,在那个月生产,必然会占用那个月到现在的仓库容量,用线段树区间修改,区间取min就行了。

    考场上我干了点啥:

    void build(int x,int l,int r){
        if(l==r) return mi[x]=e[l],void();
        int mid=l+r>>1;
        build(x<<1,l,mid);
        build(x<<1|1,mid+1,r);
        mi[x]=min(mi[x<<1],mi[x<<1|1]);
    }
    int main(){
        freopen("happy.in","r",stdin);
        freopen("happy.out","w",stdout);
        k=read();
        for(int i=1;i<=k;++i) c[i]=read(),d[i]=read(),m[i]=read(),p[i]=read();
        build(1,1,k);
        for(int i=2;i<=k;++i) e[i]=read(),r[i]=read(),E[i]=read();
    }

    考后主函数改成这样就A了:

    signed main(){
        freopen("happy.in","r",stdin);
        freopen("happy.out","w",stdout);
        k=read();
        for(int i=1;i<=k;++i) c[i]=read(),d[i]=read(),m[i]=read(),p[i]=read();
        for(int i=1;i<k;++i) e[i]=read(),r[i]=read(),E[i]=read();
        build(1,1,k);
    }

    T3.笨小猴

      将所有牌按照A排序,取前n+1个,塞到以b为关键字的小根堆里。

      之后扫一边这个序列,在保证A合法的前提下,每次判断当前牌的b是否大于堆顶的b,大于替换即可。

      然而考场上没有判堆为空的情况,所以它又挂了。

      有人说它是伪的,然而似乎hack不掉

  • 相关阅读:
    汽车文化【1196】
    西方经济学
    计算机组成原理【0013】
    C语言程序设计【0039】
    教育学【0405】
    管理学[9080]
    专业英语【0089】
    计算机基础1056
    letcode每日一题-上升下降字符串
    Flowable学习-flowable
  • 原文地址:https://www.cnblogs.com/hzoi-cbx/p/11790202.html
Copyright © 2011-2022 走看看