感觉自己好菜啊,这个专题真的不太会。

CF1439C Greedy Shopping

Link&Submission.

容易发现,当此人连续买了一段物品之后,他的钱数至少减半。所以他最多只会买 \(O(\log V)\) 段物品。那么就可以直接模拟每次询问,不断往后轮流找最多能买到的位置和下一个能买的位置。二者都可以线段树上二分,维护前缀和最大值和区间最大值。修改也是容易的。时间复杂度 \(O(n\log^2n)\)。

CF436E Cardboard Box

Link&Submission.

考虑贪心,每次取当前能够取的代价最小的星。然而这肯定不对,所以打一个补丁:如果某个两星代价比最小的两个一星之和小,那么就先把它玩到一星。注意如果只差一颗星了是不采用这个策略的。正确性还是比较显然的。

CF1452G Game On Tree

Link&Submission.

先做一次多源BFS,求出Bob占领每个点的最小时间 \(t_i\)。如果点 \(u,v\) 满足 \(dist(u,v)\le t_v\),那么Alice从 \(u\) 开始可以先于Bob到达 \(v\),这样就可以用 \(t_v\) 更新 \(u\) 为起点的答案。考虑点分树,记下每棵子树内的所有点及距离并排序,然后从每个点开始跳父亲,能更新的是一段前缀。直接二分即可。时空复杂度都是 \(O(n\log^2n)\)。

CF625E Frog Fights

Link&Submission.

模拟,用一个链表维护所有青蛙。把发生“撞飞”的时间记在一个堆里,不断取堆顶模拟,更新链表和堆。

一个实现时的细节是,当一只青蛙撞飞另一只青蛙后,直接把它的初始位置往右移动经过的时间即可。

CF533A Berland Miners

Link&Submission.

根到每个点的路径上有一个瓶颈,就是这条路径上的最小点。对每个点开一个vector,记下以它为瓶颈的所有路径。假设选择 \(u\) 增加一些,那么会导致一些路径的最小高度增加,这些路径一定都以 \(u\) 为瓶颈。一些路径仍然以 \(u\) 为瓶颈,其余的路径的最小高度会变成它的次小值。从小到大枚举 \(u\) 变成的高度,用权值线段树维护。具体来说,人的高度位置加上一个 \(-1\),路径的高度位置加上一个 \(1\),则后缀和始终非负时有方案。如果 \(u\) 变成某个高度时有方案了,那么上一个高度最后一个后缀和为负的位置就是 \(u\) 需要变成的最小高度。

CF1427F Boring Card Game

Link&Submission.

首先不考虑轮流操作的限制,容易用栈模拟出一种方案:从左往右向栈里加数,如果栈顶的三个数属于同一个人就弹出栈顶。这样的方案肯定是存在的,因为保证了有解。

对于一组数 \(a\lt b\lt c\),考虑完全包含在区间 \([a,c]\) 内的数组。在直接包含的数组间连边,得到一个森林。要求必须先取儿子再取父亲。显然有边相邻的两组数不会属于同一个人,那么轮流剥叶子就可以了。

CF671E Organizing a Race

Link&Submission.

先考虑固定一个区间如何最小化增加量。从左往右扫,当某一段路开不过去的时候就给上一个点加油。也就是说每次都选择尽可能右边的点加油。最后如果还有剩的,全部留给右端点就行。

考虑用前缀和刻画,会发现选择加油的点可以用单调栈维护。那么从右往左扫描,维护单调栈,就可以用线段树维护出后缀和进行判断。固定左端点,假设已经通过加油使得左端点可以一直向右。先二分出一个最远的位置,使得到达它需要增加的量不超过 \(k\)。然后会发现一个事情:如果一个区间内有解,那么初始最大值最大的位置一定是解。 事实上我们要求的是右端点的后缀和最大,而右端点加了 \(k\),前面的点加的都不超过 \(k\),所以上面这个结论成立。直接在线段树上二分即可。

以上用自然语言描述了算法的框架,进行列式会更好理解。

CF1548E Gregor and the Two Painters

Link&Submission.

我们在连通块内权值最小的位置统计答案。 一个点能够成为连通块内最小的点的条件是:首先它得是黑点,其次它不能只经过黑点到达一个权值比它小的点。如果权值相同,把横坐标作为第二关键字,纵坐标作为第三关键字。

会发现要进行这个判断,只要考虑单独往一个方向的情况。要求往上下左右都不能到达更小的位置。具体来说,假设考虑的点是 \((i,j)\),\(a_i\) 左边不大于他的第一个点是 \(lsta_i\),右边小于它的第一个点是 \(nxta_i\),则要求 \((i,j)\) 不能到达 \((lsta_i,j),(nxta_i,j)\),再加上对 \(b\) 类似的限制即可。

要“到不了”,就要求路径中间有一些不是黑点。记 \(ma_i=\min(\max_{j=lsta_i}^ia_j,max_{j=i}^{nxta_i}a_j\),对 \(b\) 类似定义 \(mb_i\)。要求 \(a_i+b_j\le x,a_i+mb_j\gt x,ma_i+b_j\gt x\)。离线二维数点解决。

Solution Set - 贪心和数据结构的更多相关文章

  1. Codeforces 922 C - Robot Vacuum Cleaner (贪心、数据结构、sort中的cmp)

    题目链接:点击打开链接 Pushok the dog has been chasing Imp for a few hours already. Fortunately, Imp knows that ...

  2. UVALive 7146 (贪心+少许数据结构基础)2014acm/icpc区域赛上海站

    这是2014年上海区域赛的一道水题.请原谅我现在才发出来,因为我是在太懒了.当然,主要原因是我刚刚做出来. 其实去年我就已经看到这道题了,因为我参加的就是那一场.但是当时我们爆零,伤心的我就再也没有看 ...

  3. cf 12B Correct Solution?(贪心)

    题意: 一个数a,一个数b. 现在要将a的每一位上的数字重新整理,生成一个新的不含前导0的数a'. 问a'是否等于b. 思路: a上每一位的数字从小到大排序,找到最小的非零数和第一位交换. 代码: c ...

  4. Java 算法(一)贪心算法

    Java 算法(一)贪心算法 数据结构与算法目录(https://www.cnblogs.com/binarylei/p/10115867.html) 一.贪心算法 什么是贪心算法?是指在对问题进行求 ...

  5. 【贪心】【CF1061D】 TV Shows

    Description 给定 \(n\) 个电视节目和两个参数 \(x,y\).你想要看全部的电视节目,但是同一个电视机同一个时刻只能播放一个电视节目,所以你只能多租赁电视机.在时间 \([l,r]\ ...

  6. [JZOJ6089]【CodeChef 2014 April Challenge】Final Battle of Chef【数据结构】【整体二分】

    Description \(n,q,V\leq 100000,w_i\leq 10^9\) Solution 又是一道大数据结构 由于有一个下取整,这就导致了不同时间的修改值是不能简单的直接加在一起的 ...

  7. [ZJOI2005]午餐 (贪心,动态规划)

    题目描述 上午的训练结束了,THU ACM小组集体去吃午餐,他们一行N人来到了著名的十食堂.这里有两个打饭的窗口,每个窗口同一时刻只能给一个人打饭.由于每个人的口味(以及胃口)不同,所以他们要吃的菜各 ...

  8. 【贪心】洛谷2019 OI春令营 - 普及组 作业

    [P3817 小A的糖果 小A有N个糖果盒,第i个盒中有a[i]颗糖果. 小A每次可以从其中一盒糖果中吃掉一颗,他想知道,要让任意两个相邻的盒子中加起来都只有x颗或以下的糖果,至少得吃掉几颗糖. [贪 ...

  9. 贪心--HDU 2021 发工资咯

    Description 作为杭电的老师,最盼望的日子就是每月的8号了,因为这一天是发工资的日子,养家糊口就靠它了,呵呵,但是对于学校财务处的工作人员来说,这一天则是很忙碌的一天,财务处的小胡老师最近就 ...

  10. CF1353E K-periodic Garland(贪心/dp)

    Question 有n盏灯,0代表暗,1代表亮,相邻两个1之间为周期k,求出最少的改变次数 Solution First 贪心方法 详见博客https://blog.csdn.net/cheng__y ...

随机推荐

  1. verilog之不常用语句

    verilog之不常用语句 前言 verilog是硬件描述语言,其主要特点是针对硬件逻辑的描述:在FPGA上实现时,常用的语句往往和硬件有直接的关联.比如assign,原理图上的连线,如果不省略,应该 ...

  2. BorderDet:通过边界特征大幅提升检测准确率,即插即用且速度不慢 | ECCV 2020 Oral

    边界对于定位问题十分重要,BorderDet的核心思想BorderAlign巧妙又有效,将边界特征融入到目标定位预测中,而且能够简单地融入到各种目标检测算法中带来较大的性能提升下.在开源实现中,对Bo ...

  3. KingbaseES 串行化隔离级别引起的阻塞分析

    前言 这是实际生产环境中遇到的一个问题,前端业务有如下报错: could not serialize access due to read/write dependencies among trans ...

  4. #线段树#洛谷 4269 [USACO18FEB]Snow Boots G

    题目传送门 分析 模型转换一下,能通过当且仅当最长的无法通过段小于 \(d\),(这点应该是此题的精华吧) 那么按照最大深度从小到大排序,双指针在线段树上删除无法通过段,求最长区间即可 代码 #inc ...

  5. #线段树#洛谷 4588 [TJOI2018]数学计算

    题目传送门 分析 由于曾经做过原题 所以就直接说了,因为每个数最多被除掉一次 所以可以用线段树维护区间乘,也就很简单了,删除就单点修改就行了 代码 #include <cstdio> #i ...

  6. #2-sat,Tarjan#洛谷 4171 [JSOI2010]满汉全席

    题目 分析 考虑两个至少选一个就是非A即B,非B即A, 都可行当且仅当A与非A不在同一个强连通分量里 代码 #include <cstdio> #include <cctype> ...

  7. Java 编程指南:入门,语法与学习方法

    Java 是什么? Java 是一种流行的编程语言,诞生于 1995 年.由 Oracle 公司拥有,运行在超过 30 亿台设备上.Java 可以用于: 移动应用程序(尤其是 Android 应用) ...

  8. 一个库帮你快速实现EF Core数据仓储模式

    前言 EF Core是我们.NET日常开发中比较常用的ORM框架,今天大姚要分享的内容是如何使用EF Core Generic Repository通用仓储库来快速实现EF Core数据仓储模式. E ...

  9. 多次复制Excel符合要求的数据行:Python批量实现

      本文介绍基于Python语言,读取Excel表格文件数据,并基于其中某一列数据的值,将这一数据处于指定范围的那一行加以复制,并将所得结果保存为新的Excel表格文件的方法.   首先,我们来明确一 ...

  10. UJCMS 9.1.0 发布,国内开源 java cms

    许可协议从GPL-2改为Apache-2.0,更宽松的协议,方便用户将系统集成到自身的应用中. 修复了已知bug,系统更加稳定. 升级日志(9.1.0) 修复前台全文搜索没有结果 web.xml se ...