![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
思维
哈希表扁豆
此人不懒,但什么都没写
展开
-
UVA1668 Let‘s Go Green
Problem求最少用多少边能覆盖整个树,给出每条边被覆盖的次数Solution挺巧妙的逆向思维,最大值就是边权和,然后尽可能对每个点周围的边合并,根据周围一圈的最大值与一圈和的关系计算并掉多少。Code#include <iostream>#include <cstring>#include <algorithm>#include <cstdio>using namespace std;const int maxn=1e5+5;in原创 2021-08-23 17:00:31 · 112 阅读 · 0 评论 -
D - Tree(树剖+线段树维护区间开根号)
Problem给定一颗大小为n的树和q此操作,op0:将一条树链上所有点的权值开根号;op1:求一条树链上所有点的权值和。Solution显然要用树剖将树映射到区间上,看到区间和时想用线段树维护,场上感觉线段树好像没法通过打标记维护区间开根号。点权是小于等于1e9的,对于一个点来说最多开六次点权就会变为1,如果某个区间的区间和为r-l+1,就不需要对这个区间再进行开根号操作。因此可以维护一个没有pushdown的线段树,暴力修改到底开根号,效率上最差(全部单点开根号开到1)应该是一般线段树的六分之原创 2021-08-22 06:04:48 · 369 阅读 · 0 评论 -
H - High Load Database(二分前缀和)
Problem给定序列和q次询问,每次询问给定x,求最少能将序列分成多少段使得每段的和不超过x。n<=2e5,q<=1e5。Solution倍增查找前缀和(不想写二分)预处理出前缀和,对于每组询问在前缀和上倍增的查找下一次分割的位置,一些博客上说时间复杂度是个什么调和级数,效率应该在n和logn之间。可记忆化。场上想到过,脑子一抽以为这样做比暴力还差。。。转而去想常数优化。Code#include <iostream>#include <cstdio>原创 2021-08-14 18:27:10 · 136 阅读 · 0 评论 -
HDU - 5009 Paint Pearls(链表优化DP)
Problem给一段染色的代价是这一段不同颜色数的平方,求染完序列的最小代价。Solution动态转移方程显而易见,但是裸的DP会T。通过观察可以发现,当前枚举的断点如果可能成为答案断点的左边一定是右边这一区间没出现过的数。因此我们可以用链表维护,用每个数最新出现的位置更新链表,同时最终答案一点小于等于n,每次枚举只需枚举sqrt(i)次即可。场上想不出优化时可以直接打一下转移的表观察看看。Code#include <iostream>#include <map>#i原创 2021-08-12 17:06:10 · 117 阅读 · 0 评论 -
C - Galaxy(方差)
Problem可移动k个行星,使所有行星的转动惯量和最小,每个行星质量为1,中心为平均位置。Solution只有当剩下的n-k个位置连续时才有可能作为答案,不连续一定不是最优;剩下的k个一定是移动到这n-k个的平均位置时才有可能最优(用二次函数最小值位置可证);维护前缀和和前缀平方和,扫一遍计算答案即可Code#include <iostream>#include <algorithm>#include <cmath>#include <cstdio原创 2021-08-08 20:59:05 · 96 阅读 · 0 评论 -
【2019 NWERC - J 】Jackdaws And Crows 【★★★★】
Problem【★★★】有一串序列,你要使得最终的序列正负交替,有两个操作1.用c的代价使任意部分元素+1或-1。2.用r代价删除一个数。问你最后用的代价最少是多少。Solution【★★★★】在k*c的代价下一部分元素变的可正可负,可正可负用?表示,假设一个子序列+??+?+,前两个+显然是不合法的,需要删一个,无论删哪一个都不会影响后面序列的合法性(删除数量)。这个性质使得我们可以在按权值从小到大枚举变成可负可正的点的时候可以O(1)计算此时产生的总代价。0的情况比较特殊,因为对于0来说只原创 2021-08-06 16:04:00 · 273 阅读 · 0 评论