码迷,mamicode.com
首页 > 其他好文 > 详细

模拟99

时间:2019-11-04 09:46:45      阅读:356      评论:0      收藏:0      [点我收藏+]

标签:电脑   oid   family   判断   限制   ++i   苹果   开心   app   

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不掉

模拟99

标签:电脑   oid   family   判断   限制   ++i   苹果   开心   app   

原文地址:https://www.cnblogs.com/hzoi-cbx/p/11790202.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!