随笔分类 -  ACM / 贪心

摘要:原题链接 考察:贪心 思路: 不知道具体分到哪类....总之是分情况讨论. (1) k>1的情况,分为 m<=n-1 和 mn 两种情况 (2) k1 分为3种情况. \(2.1\quad m<=n-2 和m==n-1 和 m==n\) 其中$mn$又要细分为$n2和n>2$的情况 ##Code # 阅读全文
posted @ 2021-08-24 18:43 acmloser 阅读(45) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:贪心+思维 思路: 首先明确抹去字符不能改变$s1$在$s2$的位置.也就是不存在$"你中有我,我中有你"$的情况.所以如果$s2[i]$在$s1[i]$出现位置比$s2[i+1]$晚,那么$ans++$. 两层$for$循环明显需要优化,所以预处理$s1$的情况.$f[i][j]$ 阅读全文
posted @ 2021-08-24 11:01 acmloser 阅读(48) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:模拟,贪心 思路: 万恶的模拟+离线处理题. 对于相邻的0之间的数字,最大的放在stack里,其次在队列,最后在双端队列. 要注意的是可能末尾没有0 ##Code #include <iostream> #include <cstring> #include <stack> #inc 阅读全文
posted @ 2021-08-10 12:30 acmloser 阅读(36) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:贪心 思路: 每$k-1$个间隔放,有多就从前往后放.有一些坑点要注意: $n%k$的位置和间隔的位置可以放置$m$个,这时需要特判$res$的初始值. 不能直接用左移运算符算加倍的结果.... ##Code #include <iostream> #include <cstring 阅读全文
posted @ 2021-07-25 21:26 acmloser 阅读(44) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:贪心(?) 思路: 不存在回文子串的条件是对于任意$i$,均有: $$s[i]!=s[i-1] , s[i] != s[i-2] $$ DFS枚举每一个修改的值. ##Code #include <iostream> #include <cstring> using namespac 阅读全文
posted @ 2021-07-25 15:08 acmloser 阅读(25) 评论(0) 推荐(0) 编辑
摘要:原题链接 思路: 结论题,排序奇偶分组,均分,没想出怎么证明 ##Code #include <iostream> #include <cstring> #include <algorithm> using namespace std; const int N = 100010; int n,sum 阅读全文
posted @ 2021-07-23 11:00 acmloser 阅读(20) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:贪心 思路: 死于读不懂题,对于每个仓库,求裁判到它的距离,排序,两类仓库分开求,因为题目是这么说的 ##Code #include <iostream> #include <cstring> #include <cmath> #include <queue> using names 阅读全文
posted @ 2021-07-23 01:10 acmloser 阅读(49) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:思维 过了这题的有1w+,本蒟蒻直接去死算了() 思路: 假设排序后$a[0],a[1],a[2]$ 分两种情况: \(a[2]>=2(a[0]+a[1])\),此时答案为$a[0]+a[1]$ \(a[2] < 2(a[0]+a[1])\),此时不断取a[2] 2个,a[1]取一个 阅读全文
posted @ 2021-06-30 22:56 acmloser 阅读(33) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:贪心+二分 错误思路: 对于每个折扣能买就买. 正确思路: 直接求最小天数是不好求的,先二分确定天数,然后判断此天数是否能买完.用while和优先队列模拟每天干什么,对于每个折扣,最优解是在给定天数范围内,买折扣物品的天数能晚则晚,将钱留给其他物品. ##Code #include 阅读全文
posted @ 2021-06-30 16:59 acmloser 阅读(54) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:贪心 思路: 原本的思路是根据给定1的的数量确定0数量的范围.假定当前1的数量为n,那么0的数量m的范围是 \(\frac{n-1}{2}<=m<=n{\quad} (n>=0)\).根据范围是否合法进行两种操作: \(res+="110"\) \(res+="10"\) 但是这都是 阅读全文
posted @ 2021-06-29 23:27 acmloser 阅读(35) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:贪心 错误思路: 对于每个任务,按d,a顺序排序,如果不能按时完成就付钱使得按时完成. 思路: 不一定要压当前任务的时间,我们可以压花费更小的任务时间,使得超时任务按时完成. ##Code #include <iostream> #include <cstring> #include 阅读全文
posted @ 2021-06-18 22:18 acmloser 阅读(27) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:贪心 本蒟蒻想的是线性dp,时间复杂度太高否了(.),然后又想不到正解. 思路: 参考了大佬的题解,就结果而言,最后要么是**?序列**0,1两极分布,要么是0,1混合分布. 对于混合分布,对于每一个相邻的?,要么是0,1要么是1,0.假设两个相邻?之间有s0个0,s1个1. 如果首 阅读全文
posted @ 2021-06-07 11:29 acmloser 阅读(43) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:贪心+思维 思路: 说是D题,思路比C题明显,很明显经过次数最多的边赋最大的值,虽然是构造但思路非常明显. 难点是怎么计算经过每条边的次数(本蒟蒻就卡这了菜是原罪),经过查看题解观察可得对于一条边(u,v),有sz[v](v点以及v的子节点)个点会经过v到达u或者u以上的点,两两配对 阅读全文
posted @ 2021-06-02 14:08 acmloser 阅读(32) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:贪心(?) 我是sb,A题想半天还是错的(.) 思路: \(x_b-(x_a-x_b) = k\) \(2*x_b-x_a = k\) 由此发现只要k+xa%2==1就需要移动.此时xa可以通过左移右移来使k+xa为偶数. 从这里开始根本不需要解不等式!直接讨论$x_a$与k: \( 阅读全文
posted @ 2021-06-02 02:13 acmloser 阅读(45) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:贪心+思维 思路: 将所有数字化为k*p+b,每次优先队列更新最大值,都会将最大值的k压为次大值的k.我们从大到小遍历,求解k次操作后,最大值的k,已经确定最大值所在位置idx. 求完之后,k可能有多.需要将idxn 之间的数再均摊k.但是注意它们只能均摊idxn长度的k.剩下的k, 阅读全文
posted @ 2021-05-29 09:15 acmloser 阅读(46) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:贪心 这题不难,但是本蒟蒻是fw.主要是没分析出点的性质,发现了点的个数很少后没啥反应(.) 思路: 注意到点的坐标是倍增增长的,根据起始坐标的范围,最大能运动到(2*1016,2*1016)处.a最小是2,因此最多是60个点. 接下来就没想到了,因为点坐标是倍增增大的,因此1~i的 阅读全文
posted @ 2021-05-29 03:05 acmloser 阅读(33) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:贪心+栈 本蒟蒻的思路: 检查"NO":计算每次-操作的价格最大值与最小值,如果不在此范围输出NO. 当时想出的赋值方式是while存储所有可能取值,这时间复杂度最坏O(n2).而且这种思路也比较麻烦,计算最大值与最小值也需要while处理. 参考大佬的思路: 检查NO不是通过范围取 阅读全文
posted @ 2021-05-25 15:05 acmloser 阅读(57) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:贪心+思维 原来是贪心...还以为是dp 思路: m个已知信息将n个元素序列分成了n+1段.对于每段端点求峰值即可. 但是注意第一天的起点是任意高的. 1 #include <iostream> 2 #include <cstring> 3 #include <algorithm> 阅读全文
posted @ 2021-05-10 01:30 acmloser 阅读(77) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:贪心+模拟 思路: 枚举从开始时间到结束时间每一天的收益.设收益为w,每天最多取min(树的苹果,v-w)个.注意不是最多取v个.因为是按天数枚举的.考虑存在苹果树没有取完隔天再取的情况,所以用了优先队列. 1 #include <iostream> 2 #include <cstr 阅读全文
posted @ 2021-04-15 01:37 acmloser 阅读(57) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:堆+枚举+贪心 md完全没想到,我是fw 思路: 有贪心思想可知,我们可以确定离开当前鱼塘后,去其他鱼塘钓鱼比折返更优.所以我们可以枚举最远到达哪个鱼塘,这样走路的时间就确定了.剩下就是在枚举的鱼塘范围内取最大的T-走路时间的鱼数. 时间复杂度O(n*Tlog2T) 1 #inclu 阅读全文
posted @ 2021-04-14 01:45 acmloser 阅读(62) 评论(0) 推荐(0) 编辑