09 2018 档案
摘要:C Triangular Relationship 题解 枚举一个数%K的值然后统计另两个 代码 F Revenge of BBuBBBlesort! 题解 我们按照逆操作考虑,容易发现是1 N顺序排列 每次交换$a_{i 1} include include include define ente
阅读全文
摘要:A Candy Distribution Again 大意:有x个糖给n个小朋友,必须分完,小朋友得到糖数为一个确切值的时候小朋友会开心,求最多的开心数 题解 直接排序然后贪心分,如果分到最后一个有剩余那么开心数 1即可 代码 B Garbage Collector 大意:有一个机器人从0点出发,有
阅读全文
摘要:题解 遇见平方和就转有序对呗 dp类似从很多点出发每次走一步的转移方式 然后我too naive的,枚举路径长度来决定更新次数,愉快TLE 改成记搜就过了 代码 cpp include define fi first define se second define pii pair define m
阅读全文
摘要:题解 题中给的函数可以用矩阵快速幂递推 我们记一个数组dp[i](这个数组每个元素是一个矩阵)表示从1到i所有的数字经过拆分矩阵递推的加和 转移方法是 $dp[i] = \sum_{j = 0}^{i 1} dp[j] tr[j + 1][i]$ $tr[j][i]$表示矩阵的$[j,i]$组成的数
阅读全文
摘要:题解 简单分析一下就知道$\lfloor \frac{N}{i} \rfloor$相同的$i$的$sg$函数相同 所以我们只要算$\sqrt{n}$个$sg$函数就好 算每一个$sg(m)$的时候我们可以通过把这个数再拆成$\sqrt{m}$段来计算$sg$值 复杂度用积分分析是$n^{frac{3
阅读全文
摘要:题解 又是一道取模不给质数的毒瘤矩阵树题 不会写分数类……然后发现了网上过于神仙的题解类似与辗转相除的这样把某一个位置消成0 orz 代码 cpp include define fi first define se second define pii pair define mp make_pair
阅读全文
摘要:题解 一道我觉得和二叉树没有关系的题…… 因为直接上点分就过了,虽然很慢,而且代码很长 你需要记录一个点分树,对于每个点分树的重心,记录一下上一次进行分割时树的重心以及这个重心和上一次重心所连接的点以及连接的边的距离 然后计算这个重心和所在的树到上一个重心节点路径和的前缀和,还有节点个数和 处理每棵
阅读全文
摘要:题解 把所有=的点连起来,一个图合法肯定它是一个有向树森林 我们新建一个点,把这个点和其他所有树的树根连起来 定义$dp[u][j]$表示第u个点长度为j的序列的方案数 转移方法是 $dp[u][j] += g[k] \cdot dp[v][h] \cdot \binom{j}{k} \cdot \
阅读全文
摘要:题解 怎么觉得都像树dp,不像贪心 但是树dp确实做不了 把每个节点的值设置为樱花+儿子数 把儿子合并到父亲上就是父亲的剩余容量加上儿子的值 1 每次在父亲的时候将儿子的值排序然后能加就加上 因为儿子如果不加进去那么之后的操作与儿子再也没有关系了,儿子影响的只有父亲,那么只是能让父亲一个节点被加入,
阅读全文
摘要:题解 把所有边反向 从小到大枚举每个点,把每个点能到达的点挑出来,判完无解后显然是一个DAG,然后在上面求一个编号最大的拓扑序,把这些点全部标记为已选,把每次求得的拓扑序倒序输出 代码
阅读全文
摘要:题解 如果不加这条边,那么答案是所有点入度的乘积 加上了这条边之后,我们转而统计不合法的方案数 就是相当于统计一条路径从y到x,新图所有点度的乘积除上这条路径所有点的点度乘积 初始化为$f[y] = \frac{\prod_{i = 2}^{n} ind[i]}{ind[y]}$ 转移按照拓扑序转移
阅读全文
摘要:题解 记录一个数组dp[i][S][k]表示第i个点,它上面所有的点的状态(参军或者后勤)可以用状态S来表示,一共有k个平民参军的最大收益,当然数组开不下,可以用vector动态开 我们对于每个平民枚举它上面所有贵族的状态来计算如果对于这个平民,上面所有贵族状态为S的时候,收益是多少 然后对于每个贵
阅读全文
摘要:题解 我们先跑一个斯坦纳树出来 斯坦纳树是什么,是一个包含点集里的点联通所需要的最小的价值,显然他们联通的方式必然是一棵树 我们可以设一个状态为$dis[i][S]$表示以第i个点为根,点集为$S$的点联通所需要的最小价值 我们可以从小到大枚举$S$ 有两种更新方法 $dis[i][S] = min
阅读全文
摘要:题解 我深思熟虑许久才算是明白个大概的计数问题吧 先是转化成一个矩形,列一条直线y = x,y = x (m + 1)我们从(0,0)走到(n + m + 1,m + 1)就是答案 因为我们起始相当于第一行缺一个0,然后有m+1种转移的方案,每次在距左边界j的地方某个点向上走表示转移到缺j 1,向右
阅读全文
摘要:题解 换成long double才过……出题人丧心病狂卡精度 只要按照费用排序从小到大排序,一个个插入线性基,插入的时候加上费用即可 代码 cpp include define fi first define se second define pii pair define mp make_pair
阅读全文
摘要:题解 用一个平衡树维护能攻占到u点的骑士,合并到父亲的时候去掉攻击力小于父亲生命值的那部分,只要把那棵树拆掉并且将树中的所有骑士更新一下答案,用无旋式treap很好写 合并的时候只要启发式合并就可以了 复杂度$O(n \log^2 n)$ 代码 cpp include define fi first
阅读全文
摘要:题解 我们把圆拆成两个圆弧,按照圆弧的左右端点排序来增加和删除 那么我们把圆弧按照纵坐标排序,一定是两两不相交的 我们新加入一个圆的时候,找上圆弧的前驱,如果前驱是一个上圆弧,那么这个上圆弧所在的圆就是半径最小且包含它的圆,如果前驱是一个下圆弧,那么包含这个下圆弧的圆就是包含当前圆的圆 然后构建出一
阅读全文
摘要:题解 先用kmp求出来一个ed[i][j]表示在母串的第i位是第j个子串的结尾 考虑状压一个二进制位表示这个子串覆盖过没有 对于最大值,记一个dp[S][i]表示子串的使用状况为S,当前为母串的第i位,最大覆盖的个数 每次枚举S一个没有的子串j,把目标状态记成S^(1 include include
阅读全文
摘要:题解 点一个技能点叫特征方程 就是 $a_{n + 2} = c_1 a_{n + 1} + c_2 a_{n}$ $x^2 = c_1 x + c_2$ 解出两根来是$x_1,x_2$ 通项就是 $Ax_1^{n} + Bx_2^{n}$把第一项和第二项带入可以解出来A和B 然后为了得到通项是 $
阅读全文
摘要:题解 令x = x t代换一下会发现 $\sum_{i = 0}^{n}a_i (x + t)^i = \sum_{i = 0}^{n} b_{i} x^{i}$ 剩下的就需要写高精度爆算了…… 代码
阅读全文
摘要:题解 每次按较长边把矩形分成两半,找一个中间轴,轴上的每个点跑一边最短路更新所有的答案 然后把矩形分成两半,递归下去 代码 cpp include define enter putchar('\n') define space putchar(' ') define pii pair define
阅读全文

浙公网安备 33010602011771号