Codeforces贪心训练

贪心跟个sb一样…
来cf刷几个题玩玩
注意一下**表示还要再来玩一次的

717B. R3D3’s Summer Adventure

每次拓展一个点,即从上一个最优情况来到下一个最优情况

目标就是让你建出一个字典树,满足有 n n n个叶子节点且叶子节点权最小
这里的贪心我们需要考虑的是每次拓展一个点,即从上一个最优情况来到下一个最优情况
听说这种拓展还有个名字叫 V a r n C o d e T r e e Varn Code Tree VarnCodeTree
考虑每次找到一个最小权的叶子节点 i i i,设他的权为 c c c
显然可以知道的是每次我们一定会扩展出来两个叶子节点,因为只扩展一个显然没有左右
故每次会多出两个权为 c + c 1 c+c1 c+c1 c + c 2 c+c2 c+c2的叶子节点
模拟 n − 1 n-1 n1次不难得到一个 n l o g n nlogn nlogn的做法
考虑如何加速这个过程,我们发现在权值相同的时候显然是可以同时拓展一些叶子节点。设 f [ i ] f[i] f[i]表示权值为 i i i的叶子节点个数,则每次取出最小的开始拓展。注意到每次节点个数的增长类似于斐波那契数列,故复杂度可以通过
注意特判掉存在某个 c c c 0 0 0的情况

**538H. Summer Dichotomy

贪心考虑答案的最终位置的性质

这个题搞完了之后还是迷迷糊糊的…
可能变得不naive一点之后会再来搞一次?
这题的套路是贪心考虑答案的最终位置的性质
在不考虑 t 1 , t 2 t1,t2 t1,t2的限制下,不妨设存在一组解 n 1 n1 n1 n 2 n2 n2
满足 n 1 &gt; m a x ( l i ) n1&gt;max(l_i) n1>max(li) n 2 &lt; m i n ( r i ) n2&lt;min(r_i) n2<min(ri)
显然可以发现,如果出现了这种情况,我们总能往左移动 n 1 n1 n1同时往右移动 n 2 n2 n2
一定能使得两个点都贴上边界并且答案仍然合法
所以不妨设 n 1 = m a x ( l i ) , n 2 = m i n ( r i ) n1=max(l_i),n2=min(r_i) n1=max(li),n2=min(ri)
此时 n 1 n1 n1需要向右移动, n 2 n2 n2需要向左移动
如果多出了 t 1 , t 2 t1,t2 t1,t2的限制,我们发现,在 n 1 , n 2 n1,n2 n1,n2向左与向右移动(即初始情况不满足限制)的时候,一定能够使得一个点贴上了 t 1 t1 t1或者 t 2 t2 t2的边界。并且使得答案仍然成立
故我们定值之后再对 n 1 , n 2 n1,n2 n1,n2取边界值。然后二分图染色判定即可

1097E. Egor and an RPG game

贪心考虑不同决策时对答案的影响

其实大概想了一下如果每次贪心选最长上升或者下降序列…
因为不会求复杂度就跑了2333…可能以后写一下我这个做法?
题解做法很巧妙,用到了我忽略的 f f f数组
先抛出结论,设 k k k为满足 m a x ( k ∗ ( k + 1 ) 2 &lt; = n ) max(\frac{k*(k+1)}{2}&lt;=n) max(2k(k+1)<=n)的数,则 f [ n ] = k f[n]=k f[n]=k
考虑归纳证明
对一个长度为 n n n的序列,先求出其 L I S LIS LIS
如果长度 &gt; K &gt;K >K,贪心的将其删除然后递归向下完成
注意到他减去了之后合法的 K K K一定不会大于 k ∗ ( k − 1 ) 2 \frac{k*(k-1)}{2} 2k(k1),故对于剩下来的 n n n是合法的
否则,我们根据 L I S LIS LIS的结果构造下降序列
对于 L I S LIS LIS数组 g [ i ] g[i] g[i]同值的,我们将其放到同一组。显然同组中数不递增,故可以用 ≤ K \leq K K的次数构造完成这个序列
实现模拟上述过程即可
复杂度是非常不满的 n n log ⁡ n n\sqrt n\log n nn logn

533A. Berland Miners

贡献 !贡献!贡献!

转化的有点慢了…
权值离散,预处理每个点到根上的最大值和次大值
注意这种匹配的题一般都是把两个序列归为一个序列,然后一个设为 + 1 +1 +1另一个设为 − 1 -1 1,考虑后缀和不小于 0 0 0的问题
那么用线段树维护一下最小的后缀值就可以快速判合法,问题在于现在是怎么移动
用一个小小的贪心
从后往前找到第一个后缀和小于 0 0 0的位置 x x x,显然我们需要增大的那个点就是要增大到 x x x
增加少了没有作用,增加大了没有贡献
故剩余直接模拟上述过程即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值