标签:电脑 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不掉
标签:电脑 oid family 判断 限制 ++i 苹果 开心 app
原文地址:https://www.cnblogs.com/hzoi-cbx/p/11790202.html