04 2019 档案

摘要:题面 思路: 函数f相当于是求一个点集f的直径,有一个性质是如果这个点集有多个直径一定相交于某一个点,或者一条边的中心,所以我们暴力枚举重心,计算以某个点为重心的点集对答案的贡献。 具体实现的时候,我们从一个重心开始深搜,计算其它点到这个点的距离。我们现在假设计算以当前点为重心,有多少个点集的直径是 阅读全文
posted @ 2019-04-27 22:59 维和战艇机 阅读(168) 评论(0) 推荐(0)
摘要:题意:给你两个数x 和 y, x = a + b, y = a XOR b,问有没有合法的a和b满足这个等式? 思路:有恒等式: a + b = ((a & b) << 1) + (a ^ b),所以x - y = ((a & b) << 1), 如果x - y奇数,那就没有合法方案,否则我们可以构 阅读全文
posted @ 2019-04-23 23:38 维和战艇机 阅读(297) 评论(0) 推荐(0)
摘要:大概思路及题意看这篇博客吧 我的理解:设f[i]表示处理到第i个区间,能唱的最多的歌,g[i]是保证f[i]最大时最靠左的点。那么f[i] = max(f[j] + (r[i] - max(l[i], g[j] + t)) / p), g[i] = r[i] - (r[i] - max(l[i], 阅读全文
posted @ 2019-04-23 23:03 维和战艇机 阅读(169) 评论(0) 推荐(0)
摘要:题意:有2个人玩游戏,他们都有个初始值a和b, 游戏进行t轮, 每次可以选择加上一个[-k, +k]之间的数字,问有多少种方案a的和严格大于b的和。 思路:如果不考虑多于这个条件,只是询问有多少种方案的化,这是一个数塔模型的DP, 设dp[i][j]为到i位置,前面的数的和为j的方案数,直接转移即可 阅读全文
posted @ 2019-04-23 18:29 维和战艇机 阅读(221) 评论(0) 推荐(0)
摘要:题意:给你n个数,和一个数m, 问最小需要多少个数,可以让这些数乘起来是m的倍数。如果有多组,取和最小的那一组。 思路:因为m的范围到1e12,并且和取模相关,所以容易想到处理出m的约数,然后离散化一下,降低DP的第二维的复杂度,因为如果这些数的乘积不是m的约数,就没有意义了。dp[i][j]表示处 阅读全文
posted @ 2019-04-23 12:32 维和战艇机 阅读(290) 评论(0) 推荐(0)
摘要:题意:有n位选手,已知n位选手之间两两获胜的概率,问主角(第一个选手)最终站在擂台上的概率是多少? 思路:一看数据范围肯定是状压DP,不过虽然是概率DP,但是需要倒着推;我们如果正着推式子的话,初始状态是不确定的,因为并不知道一开始把哪个人放在擂台上最后主角获胜的概率最大。所以我们可以假设主角最后获 阅读全文
posted @ 2019-04-23 10:13 维和战艇机 阅读(306) 评论(0) 推荐(0)
摘要:题意:给你一个字符串,这个字符串的构造方法如下:先选择一个长度大于4的前缀,然后每次向字符串尾部添加一个长度为2或者长度为3的后缀,不能添加连续的相同的后缀,问可能的后缀有哪些?并按字典序输出去。 思路:第一眼感觉要记忆化,设dp[i]表示把前i个字符作为前缀是否有合法方案,那么只有当前长度为2的串 阅读全文
posted @ 2019-04-23 08:13 维和战艇机 阅读(238) 评论(0) 推荐(0)
摘要:题意:给你一个长度为n的数列,你需要把这个数列分成几段,每段的和不超过m,问各段的最大值之和的最小值是多少? 思路:dp方程如下:设dp[i]为把前i个数分成合法的若干段最大值的最小值是多少。dp转移比较显然,dp[i] = min{dp[j] + max(a[j + 1] , a[j + 2] . 阅读全文
posted @ 2019-04-22 20:47 维和战艇机 阅读(236) 评论(0) 推荐(0)
摘要:题意:有一个人去买铲子,他需要买正好k把。每把铲子有个标价,并且每把铲子最多只能被买一次。有m种优惠方案,每个优惠方案xi, yi是指如果这次恰好购买了xi把铲子,那么这次购买的铲子中最便宜的yi把将免费。问买k把铲子的最少花费。题目可以分多次购买铲子,只要购买的铲子总数是k把就可以。买过的铲子就不 阅读全文
posted @ 2019-04-19 11:39 维和战艇机 阅读(281) 评论(0) 推荐(0)
摘要:题意:给你一堆数,问其中lcm最小的一对数是什么? 思路:因为lcm(a, b) = a * b / gcd(a, b), 所以我们可以考虑暴力枚举gcd, 然后只找最小的a和b,去更新答案即可。 数据范围1e7? 不慌,bitset搞一下, 1e7log(1e7)可以500ms过。 代码: 阅读全文
posted @ 2019-04-19 10:40 维和战艇机 阅读(278) 评论(0) 推荐(0)
摘要:题意:有一个游戏,规则如下:每个点有一个标号,为max或min, max是指这个点的值是所有子节点中值最大的那一个,min同理。问如何给这颗树的叶子节点赋值,可以让这棵树的根节点值最大。 思路:很明显的树形dp, 设dp[x]是指以x为根的子树中可以获得的最大的值, sz[x]是指以x为根的子树中叶 阅读全文
posted @ 2019-04-14 12:17 维和战艇机 阅读(571) 评论(0) 推荐(0)
摘要:思路及博客:https://www.cnblogs.com/uid001/p/10507346.html 代码: 阅读全文
posted @ 2019-04-13 19:35 维和战艇机 阅读(211) 评论(0) 推荐(0)
摘要:题意及思路:https://www.cnblogs.com/TinyWong/p/10400682.html 代码: 阅读全文
posted @ 2019-04-13 10:56 维和战艇机 阅读(257) 评论(0) 推荐(0)
摘要:思路看这篇博客就行了:https://www.cnblogs.com/zhouzhendong/p/CF1109D.html, 讲的很好 今天学到了prufer编码,这是解决树上计数问题的一大利器,博客:https://www.cnblogs.com/jianglangcaijin/p/598993 阅读全文
posted @ 2019-04-11 16:40 维和战艇机 阅读(239) 评论(0) 推荐(0)
摘要:Codeforces 1120E (很难的暴力) 1156G(模拟) lyd书上的DP优化部分 LCT 计算几何 整体分治 cdq分治 (不熟) kd-tree fft 莫比乌斯反演(不熟) 模拟退火与爬山法 https://blog.csdn.net/u013733326/article/deta 阅读全文
posted @ 2019-04-09 10:48 维和战艇机 阅读(144) 评论(0) 推荐(0)
摘要:题意看这篇博客:https://blog.csdn.net/dreaming__ldx/article/details/88418543 思路看这篇:https://blog.csdn.net/corsica6/article/details/88115948 有个坑点,不能深搜去找具体方案,不然 阅读全文
posted @ 2019-04-08 17:56 维和战艇机 阅读(381) 评论(0) 推荐(0)
摘要:题意:有一辆火车,初始只有一个车厢,权值为0。有3种操作: 1:在火车头前面加若干辆车 2:在火车车尾加若干辆车 3:每个车的权值加上b + (i - 1) * s,其中i是指这节车厢是从头算的第几个车厢。 每次操作后,询问离火车头最近的权值最小的车厢。 思路:看这篇博客就行了,实现方式比较巧妙。 阅读全文
posted @ 2019-04-08 13:59 维和战艇机 阅读(210) 评论(0) 推荐(0)
摘要:题意:首先定义了一种类数(标志数) 1:1到9都是标志数。 2:若x / 10是标志数,假设x /10在标志数中的排名是k, 若x的个位数小于k % 11, 那么x也是标志数。 现在给你一个字符串,问有多少个子串代表的数字是标志数? 思路:我们先假设已经求出的所有的标志数,并且知道每个标志数的ran 阅读全文
posted @ 2019-04-07 17:47 维和战艇机 阅读(492) 评论(2) 推荐(0)
摘要:题意:给你一个字符串,有2种消除方式:1:消除一个单独的字母,代价为a。2:s[j]到s[k]是s[1]到s[j - 1]的子串,那么s[j]到s[k]可以消除,代价为b,问最小的代价。 思路:官方题解说的很明白了。 代码: 阅读全文
posted @ 2019-04-07 12:59 维和战艇机 阅读(587) 评论(0) 推荐(0)
摘要:题意及思路 模拟场上用一般方法枚举非常麻烦,一个小时没写出来,还是自己太菜了。。。用表达式树枚举有一个好处,判断需不需要加括号非常方便,只有当前节点运算符的优先级高于子节点的时候,才需要给子节点加一个括号。 代码: 阅读全文
posted @ 2019-04-06 15:13 维和战艇机 阅读(342) 评论(0) 推荐(0)
摘要:恢复内容开始 题意:给你一个排列p和数组a,有t组询问,每次询问一个区间的子序列中是否有p的一个循环排列。 思路:以p = [3, 1, 2]举例, 我们扫描数组b,假设当前数字是1,那么我们找前面离现在最近的3的位置,然后连一条边。为什么只连最近的呢?比如[3,3,1,2]这种情况,1只需要和第二 阅读全文
posted @ 2019-04-05 10:38 维和战艇机 阅读(487) 评论(0) 推荐(0)
摘要:题面 比赛时被模拟题打自闭了,本来以为是个比较麻烦的模拟,实际上只要会C++的regex不到40行就能把这个题过掉了(orz smz) regex是用来处理正则表达式,里面有个函数regex_replace(string s, regex re, string new_string)可以将s中满足正 阅读全文
posted @ 2019-04-03 21:55 维和战艇机 阅读(2016) 评论(0) 推荐(1)
摘要:题意:给你一颗树,每个节点有有一个权值,每次询问从x到y的最短路上权值在c到d之间的所有的点的权值和是多少。 思路:肯定要用树剖,因为询问c到d之间这种操作树上倍增很难做,但是用其它数据结构可以比较好的查询。我们可以用线段树来进行这种操作。每次询问一个区间时,如果当前区间被查询区间完全覆盖,并且区间 阅读全文
posted @ 2019-04-03 20:52 维和战艇机 阅读(203) 评论(0) 推荐(0)
摘要:题意 思路:直接树链剖分,用线段树维护即可,算是树剖的经典题目吧。 代码: 阅读全文
posted @ 2019-04-02 20:36 维和战艇机 阅读(155) 评论(0) 推荐(0)
摘要:题意及思路 说一下为什么按LCA深度从深到浅贪心是对的。我们可以直观感受一下,一条的路径会影响以这个lca为根的这颗树中的链,而深度越深,影响范围越小,所以先选影响范围小的路径。 阅读全文
posted @ 2019-04-02 10:56 维和战艇机 阅读(209) 评论(0) 推荐(0)
摘要:题意及博客 树链剖分分为2步,第一次求出深度,重儿子,第二次求出重链,用到了启发式的思想,即对于比较重的儿子,尽量去完整的维护它。类似于我们去合并两个堆,明显把小的堆逐个插入大的堆中会比大的往小的插更优,而这可以达到均摊O(logn)的效果。对于这个题,类似选重儿子, 我们每次尽量选择最长的路径,选 阅读全文
posted @ 2019-04-02 09:05 维和战艇机 阅读(148) 评论(0) 推荐(0)