03 2019 档案

摘要:"嘟嘟嘟" 一道比较有意思的dp。 这题关键在于状态的设计。如果像我一样令$dp[i][j]$表示选到第$i$个物品,$\sum c$能都等于$j$的话,那就是$O(qnk)$了,怒拿一半分…… 正解应该是令$dp[i][j]$表示选出的物品的$a$小于等于$i$,$\sum c$等于$j$时,$b 阅读全文
posted @ 2019-03-31 10:07 mrclr 阅读(204) 评论(0) 推荐(0)
摘要:嘟嘟嘟 这种计数大题就留给南方的计数神仙们做吧…… 刚开始我一直想枚举点,考虑新加一个点在根节点的左右子树,以及左右子树大小怎么分配,但是这样太难计算新的点带来的贡献了。 后来lba又提示我枚举边,考虑每一条边的贡献。 这确实是一个好主意,枚举边的同时考虑边两侧的点数,但可怕的是我一直把他当成无根树 阅读全文
posted @ 2019-03-27 23:16 mrclr 阅读(167) 评论(0) 推荐(0)
摘要:"嘟嘟嘟" 先看了一遍lucas,还是只能拿50分(~~似乎已经满足了~~)。 正解当然还是看某个大佬的啦。 我们要求的就是 $$f(n, k) = \sum _ {i = 0} ^ {k} C _ {n} ^ {i} \% p$$ 然后根据lucas定理,就开始~~愉快~~的推式子了…… $$ \ 阅读全文
posted @ 2019-03-27 17:58 mrclr 阅读(190) 评论(0) 推荐(0)
摘要:嘟嘟嘟 这题其实就是一个线段树维护最大连续和的水题。 别的操作不说,操作1只要二分找区间前$k$个0即可。 需要注意的是,因为操作1两区间可能有交,因此要先清空再二分查询…… 复杂度$O(n log ^ 2 n)$。 #include<cstdio> #include<iostream> #incl 阅读全文
posted @ 2019-03-27 14:06 mrclr 阅读(191) 评论(0) 推荐(0)
摘要:嘟嘟嘟 这题就比较水了,毕竟只评了个蓝。 想一下发现满足单调性,所以可以二分找最大值。 但是最小值怎么办?刚开始我很zz的以为只要把判断条件从大于等于改成小于等于就行了,后来发现根本不对。 想了想因为最小值和最大值之间一定是一段答案为$k$的区间,所以可以二分找最小值:如果当前答案不等于$m$,就向 阅读全文
posted @ 2019-03-27 07:22 mrclr 阅读(175) 评论(0) 推荐(0)
摘要:嘟嘟嘟 这题我连$O(n ^ 2)$的都没想出来…… 刚开始看到字符串就想SAM,然后发现连具体的串都没有,觉得再用字符串算法的话就有点扯了。 首先应该发现一点,如果然两个区间相等,实际上就是两个区间对应位置的数相等。所以我们把区间拆成一个个单独的位置,然后用并查集维护相等的位置集合即可。 那么答案 阅读全文
posted @ 2019-03-25 16:19 mrclr 阅读(185) 评论(0) 推荐(0)
摘要:"嘟嘟嘟" 这不就是个bsgs板儿嘛。 顺便就复习了一下bsgs和哈希表。 头一次觉得我的博客这么好用,一下就懂了: "数论学习笔记之高次不定方程" 这里再补充几点: 1.关于这一段代码: c++ int S = sqrt(c), p = 1; for(int i = 0; i include in 阅读全文
posted @ 2019-03-21 17:23 mrclr 阅读(195) 评论(0) 推荐(0)
摘要:"嘟嘟嘟" 这题真的挺神的,我是真没想出来。 洛谷的第一篇题解说的非常妙,实在是佩服。 就是我们首先预处理出对于第$i$个数,在$i$左边比第一个比$i$大的数$l_i$,在$i$右边第一个比$i$大的数$r_i$。 这个可以用单调栈扫两边分别求出来。 然后我们考虑位于$[l_i, r_i]$中的所 阅读全文
posted @ 2019-03-21 15:35 mrclr 阅读(131) 评论(0) 推荐(0)
摘要:"嘟嘟嘟" 正如某题解所说,这题很有误导性:我就一直在想凸包。 随便一个数据,就能把凸包hack掉: 这样我们的点G就gg了。 所以正解是什么呢?dp。 题解看这位老哥的吧,我感觉挺好懂的: "题解 P4563 【[JXOI2018]守卫】" c++ include include include 阅读全文
posted @ 2019-03-20 18:59 mrclr 阅读(248) 评论(0) 推荐(0)
摘要:嘟嘟嘟 这是今天做的第二道九条可怜的题,现在对他的题的印象是:表面清真可做,实则毒瘤坑人。 首先要感谢吉司机,我期望学的特烂,好在样例直接告诉我们期望怎么求了。 令$b_i$表示第$i$个不同的数的出现次数,那么期望就是 \(\frac{(n + m)!}{b_1! * b_2! * \ldots 阅读全文
posted @ 2019-03-20 16:27 mrclr 阅读(234) 评论(0) 推荐(0)
摘要:嘟嘟嘟 九条可怜竟然有这种良心题,似乎稍稍刷新了我对九条可怜的认识。 首先假设我们求出了所有必须要筛出来的数m,那么$t(p)$就只受最后一个数的位置影响。 所以我们枚举最后一个数的位置,然后用组合数搞一下就完事了。 令$dp[i]$表示最后一个数在位置$i$时,$t(p)$的和,则 \(dp[i] 阅读全文
posted @ 2019-03-20 11:33 mrclr 阅读(189) 评论(0) 推荐(0)
摘要:嘟嘟嘟 这题拿到后就瞬秒$k = 1$的情况,跟这题一模一样。 所以我最后也只拿了31分…… 正解要推出这么个性质,就是如果只有一座桥,那么所有城市和办公室的中位数就是这座桥的位置(然而我的$k = 1$做法显然没有用到这一点……)。 怎么证明呢? 先用式子表示一下:就是我们要找到一个$x$,满足$ 阅读全文
posted @ 2019-03-20 10:28 mrclr 阅读(227) 评论(0) 推荐(0)
摘要:嘟嘟嘟 我看我是老了啊,这zz题都在想暴力(还只搞了20分)…… 什么三分, 什么单调性,直接暴力枚举就行了。 我们暴力枚举最后的成绩公布时间,然后算上二分查找$O(logn)$时间单次计算就行。 刚开始我一直没想出来,怎么求$n$个数和$x$的差的和,一直在搞什么数据结构,其实直接整体考虑,用$n 阅读全文
posted @ 2019-03-19 14:26 mrclr 阅读(215) 评论(0) 推荐(0)
摘要:嘟嘟嘟 首先这题的暴力是十分好写的,而且据说能得不少分。 正解写起来不难,就是不太好想。 根据做题经验,我想到了给这个序列转化成01序列,但是接下来我就不会了。还是看了题解。 因为查询只有一个数,所以可以二分答案:把大于等于mid的数标记成1,小于mid的数为0.这样排序就是区间赋值了,线段树可做。 阅读全文
posted @ 2019-03-18 20:22 mrclr 阅读(118) 评论(0) 推荐(0)
摘要:嘟嘟嘟 现在看到字符串就想到SAM,所以很担心kmp啥的会不会忘了…… 这题感觉挺暴力的:首先当然要把$s$建成SAM,然后令$dp[i][j]$表示到第$i$组时,SAM上节点$j$能匹配的字符串个数。 转移的时候暴力枚举起点节点$p$,然后每一次都把当前字符串放上去跑,如果在SAM上存在的话,令 阅读全文
posted @ 2019-03-18 17:58 mrclr 阅读(462) 评论(0) 推荐(1)
摘要:嘟嘟嘟 判断树的同构的方法就是树上哈希。 如果树是一棵有根树,那么只要从根节点出发dfs,每一个节点的哈希值等于按传统方式算出来的子树的哈希值的结果。需要注意的是,算完子树的哈希值后要先排序再加起来,因为两个互为同构的树可能子树顺序不同,以哈希值作为关键字排序,就能保证相同的子树位置也相同了。 对于 阅读全文
posted @ 2019-03-18 11:47 mrclr 阅读(279) 评论(0) 推荐(0)
摘要:嘟嘟嘟 这算是我做过的最神的一道网络流题了。 话说有人能想到这题用费用流吗 某神仙说,看到网格图,就能想到黑白染色(我就想不到)。那么假设我们现在想到了。 然后用1个流量代表一个管道接口,那么存在解得条件必定是总流量等于接口数除以2。 先想一下不能转动的情况:容易想到拆点,把一个点分别拆成这个点的上 阅读全文
posted @ 2019-03-13 20:21 mrclr 阅读(543) 评论(0) 推荐(1)
摘要:"嘟嘟嘟" 这题乍一看挺水的,似乎和选课一样,但其实不太一样,因为,他有环。 但这也并没有多难,我先说正解,然后分享一下我奇特的错误算法。 正解很好想,因为环中的点是不必须选的(没错,只有环中的点),因此用tarjan缩点,然后重新建图,跑树形dp就行了。 我的奇特想法是啥咧?我不知咋想的,认为只要 阅读全文
posted @ 2019-03-07 17:57 mrclr 阅读(155) 评论(0) 推荐(0)
摘要:嘟嘟嘟 今天复习lct,趁着还年轻多写点数据结构。 首先不得不吐槽一下,题面好长啊…… 通过观察发现,\(c \leqslant 10\)。那么就可以暴力的建10棵lct。 接下来说下具体做法: 1.修改点权 在$c$棵lct上都改一遍。 2.修改边的颜色。 设原来的颜色为$i$,改成$j$。那么相 阅读全文
posted @ 2019-03-07 15:46 mrclr 阅读(180) 评论(0) 推荐(0)
摘要:嘟嘟嘟 这题看数据范围大概能猜出来是网络流,不过作为多年没写网络流的我,建图果然还是没想出来…… 首先看到题目说,要想击溃某植物,就必须先击溃某植物,那可能会想到拓扑排序。但是拓扑排序和网络流并没有什么关系,还得换个方法。 然后我就想不到了。正解是我们反着建图,从被保护的植物向保护他的植物连边。于是 阅读全文
posted @ 2019-03-06 19:57 mrclr 阅读(208) 评论(0) 推荐(0)
摘要:"嘟嘟嘟" 这题就比较有意思了,十分锻炼思维。 首先得学会转化,对于题中“有$a_i$个人比我高,$b_i$个人比我低”,相当于排在第$a_i + 1$到$n b_i$位的人和我分数相同。 因此我们就把每一个人说的话变成了一段区间,那么说真话的人肯定是所有不相交的区间。乍一看就变成了 "区间覆盖" 阅读全文
posted @ 2019-03-06 15:36 mrclr 阅读(154) 评论(0) 推荐(0)
摘要:嘟嘟嘟 这道题真的挺好的,虽然数据很水,还卡空间。 有多水呢?建完SAM后,把他和反串匹配一遍,就能得90分……这个做法显然是不对的,比如abcweabc,求出来是3,但答案应该是2. 因为我不会回文自动机,所以就学了一下题解的SAM+manacher的做法。 建完SAM后,开始用manacher求 阅读全文
posted @ 2019-03-06 14:00 mrclr 阅读(175) 评论(0) 推荐(0)
摘要:嘟嘟嘟 半年不写splay,一写就半年…… 辛亏我长精神头复习了一下,要不然考场上遇到平衡树的题肯定废了。 这道题,无非就让你求这么几个事儿: 1.区间加。 2.区间乘。 3.区间向后移一位。 4.代数求和。 对于查询操作,因为最多不超过10次,所以单次$O(nlogn)$暴力就好了。 前两个操作不 阅读全文
posted @ 2019-03-05 19:38 mrclr 阅读(189) 评论(0) 推荐(0)
摘要:嘟嘟嘟 这几天复习一下数据结构,要不就忘了。 这题据说能拿STL水过,但是我仍是写了一发splay。 对于第一个询问,我确实是拿vector + multiset水过去的。但是第二问我还是写了个splay,支持插入和查找前驱和后继。 splay的数组别忘开二倍,因为最终可能有$n + m$个元素。 阅读全文
posted @ 2019-03-05 14:40 mrclr 阅读(161) 评论(0) 推荐(0)
摘要:嘟嘟嘟 这题怎么想都想不出来,最后还是敲了暴力,喜提40分…… 正解竟然也是暴力…… 用$s_0$构造SAM,然后把$s$扔上去暴力dfs:记录一个修改次数tot,如果当前不匹配,就tot + 1并且往下跳…… 反正就是过了…… 记得多组数据,清空数组。 #include<cstdio> #incl 阅读全文
posted @ 2019-03-04 17:35 mrclr 阅读(193) 评论(0) 推荐(0)
摘要:"嘟嘟嘟" 这题刚开始想复杂了,想什么dp去了,其实没那么难。 考虑断掉一条边,记分离出来的两棵子树为A和B,那么合并后的树的直径可能有三种情况: 1.A的直径。 2.B的直径 3.A的半径+边权+B的半径。 半径是啥?记从点$i$出发到树上任意一点的最长距离为$f[i]$,则树的半径就是$min 阅读全文
posted @ 2019-03-04 15:54 mrclr 阅读(264) 评论(0) 推荐(0)
摘要:"嘟嘟嘟" 这题其实还是比较好想的,就是有一个小坑点。 首先钩子多的排在前面,然后就是dp了。 dp方程就是$dp[i][j]$表示到了第$i$建物品,还剩$j$个挂钩的最大喜悦值。转移就很显然了:$dp[i][j] = max \{dp[i 1][j + 1 a[i]] + b[i] \}$。 然 阅读全文
posted @ 2019-03-04 13:22 mrclr 阅读(184) 评论(0) 推荐(0)
摘要:嘟嘟嘟 一眼看上去像状压dp,然后越想复杂度越不对劲,最后发现和爆搜差不多,索性就写爆搜了,复杂度$O(\(能过\))$。 别忘了填拼图和回溯的时候只动拼图中是1的部分,不要把$n * m$的矩形全改了。 #include<cstdio> #include<iostream> #include<cm 阅读全文
posted @ 2019-03-03 16:08 mrclr 阅读(163) 评论(0) 推荐(0)
摘要:嘟嘟嘟 这题除了暴力我就不会了,感觉得用SAM,但是又和普通的SAM不一样。 看了题解才知道,这东西叫广义后缀自动机。 就是解决例如多个串的本质不同的子串的个数这样的问题。 做法就是每插入完一个串,就重新从根节点开始插入另一个字符串。(但一直只有一个SAM) 对于这道题,可以理解为在trie上建SA 阅读全文
posted @ 2019-03-03 15:00 mrclr 阅读(314) 评论(0) 推荐(0)
摘要:今天看了一下矩阵树定理,然后学了一下$O(n ^ 3)$的方法求行列式。 哦对了,所有的证明我都没看…… 这位大佬讲的好呀: [学习笔记]高斯消元、行列式、Matrix-Tree 矩阵树定理 关于模数不是质数的情况,我看了半天才懂:其实就是加速了两行的辗转相减,把一次次减换成了取模。然后别忘了每一次 阅读全文
posted @ 2019-03-03 14:35 mrclr 阅读(145) 评论(0) 推荐(0)
摘要:嘟嘟嘟 遇到这种(看似)构造的题,我好像一般都做不出来…… 然而这题正解是高斯消元解异或方程组…… 首先我们容易列出式子a[i][j] ^ a[i - 1][j] ^ a[i + 1][j] ^ a[i][j - 1] ^ a[i][j + 1] = 0。于是我们列出所有像这样的$n * m$个式子 阅读全文
posted @ 2019-03-02 16:39 mrclr 阅读(288) 评论(0) 推荐(0)
摘要:"嘟嘟嘟" 这题一看就是数位dp。 我写数位dp,一般是按数位dp的格式写一个爆搜,然后加一点记忆化。 不过其实我一直不是很清楚记忆化是怎么加,感觉就是把dfs里的参数都扔到dp数组里,好像很暴力啊。 这题有一个坑点就是数字必须是电话号码,也就是11位且没有前导零。因此关于前导零的处理是最高位不能为 阅读全文
posted @ 2019-03-02 13:34 mrclr 阅读(178) 评论(0) 推荐(0)
摘要:嘟嘟嘟 哈,我竟然一眼秒了,从开始看题到A用了不到15分钟。 SAM每一次求不同子串个数是$O(n)$的,所以$O(n ^ 2)$自然过不了。 这时我想了想SAM每一次是怎么求不同子串个数的,就是遍历parent树,每一次加上$len[now] - len[link[now]]$。 因此我们添加字符 阅读全文
posted @ 2019-03-02 10:26 mrclr 阅读(192) 评论(0) 推荐(0)
摘要:"嘟嘟嘟" 这题想了半天,搞出了一个$O(10 d n)$($d$为$n$的约数个数)的贪心算法,就是能在子树内匹配就在子树内匹配,否则把没匹配的都交给父亲,看父亲能否匹配。交上去开了O2才得了60分。按讨论中的方法卡常后还是A不了,就放弃了。 正解需要推一个结论,就是一棵树能被分成$x$个大小相同 阅读全文
posted @ 2019-03-02 10:06 mrclr 阅读(193) 评论(0) 推荐(0)
摘要:"嘟嘟嘟" 这题大意就是有一个DAG,然后添加了一条边,求上有多少种生成树。 这题想了半天,最后还是写了暴力。暴力就是$O(2 ^ mn)$的那种,还出锅了几次:刚开始我不想dfs判断选出的边是否构成树,于是yy了一下,以为只要边数为$n 1$,除了根节点每个点的入度为1且都被访问过就行了。却忘了有 阅读全文
posted @ 2019-03-01 19:21 mrclr 阅读(327) 评论(0) 推荐(0)