09 2022 档案
摘要:P5023 NOIP2018 提高组 填数游戏 点击查看代码 #include <stdio.h> typedef long long LL; const int mod = 1e9 + 7; const int a_nn[] = {0, 2, 12, 112, 912, 7136, 56768,
阅读全文
摘要:【NOIP2017 提高组】宝藏 f[S][i]表示集合S的点构成的生成树,树高为i({i}为0)的最小花费 转移: 枚举S的子集S'为高度为i-1的树(S'可扩展出S):f[S][i]<-f[S'][i]+cost 预处理出g[S]表示S能够扩展出的点 点击查看代码 #include <stdio
阅读全文
摘要:NOIP2017提高组 逛公园 f[u][i]表示1~u的距离为其最短路+i的方案数,如果有0环则标记inf=1 dp时使用在反图上记忆化搜索并使用是否在栈中判断0环 点击查看代码 #include <queue> #include <stdio.h> #include <string.h> #in
阅读全文
摘要:P5658 CSP-S2019括号树 先考虑线性的情况 .....(....) 如果是(则将其左边的答案加入栈,这个点的答案为0 如果是)则将栈顶左边的答案+1作为贡献(答案) 每个点的答案为以这个点为右端点的字串的个数 统计答案时前缀和即可 书上的同理,将“左边”改为“父节点” 注意回溯和栈是空的
阅读全文
摘要:P5665 CSP-S2019划分 f[i][j] 表示前i个数,最后的位置为j的最小平方和,s为前缀和 f[i][j] = (s[i]-s[j])**2 + min:f[j][k] ,其中si-sj>=sj-sk,0<=k<j 结论::::::::f(i,j)有解时f(i,j-1)>=f(i,j)
阅读全文
摘要:P1084 NOIP2012提高组 疫情控制 先二分 将所有军队尽量往上跳 如果能跳到根节点的子节点且能够越过根节点,存入pair(到根节点后的剩余时间,节点编号)(使用倍增优化) ; 否则:驻扎此节点 将pair的点按第一个排序 用第一个最小覆盖第一个没有被覆盖的根节点的子节点(贪心) 剩下的节点
阅读全文
摘要:CF451E Devu and Flowers 若没有个数限制, 则可以用插板法解决 有个数限制: 设第 i 个箱子里选了 x_i 朵花 设集合 S_{s} 表示集合 s 中的花的数量 > a_i 的集合 则 |S_{s}|=C_{m+n-1-∑{(a_j+1),j∈s}}^{n-1} 组合数用定义
阅读全文
摘要:####UVA11762 Race to 1 f[x] 表示将 x 变为 1 的期望步数, p[x] 表示 <=x 的质数的个数, g[x] 表示 x 的质因数的个数 点击查看代码 #include <stdio.h> typedef long long LL; const int N = 1e6
阅读全文
摘要:P7077 [CSP-S2020] 函数调用 调用是一个拓扑图 乘法: 每个数贡献这个倍数次 通过拓扑图的DP求出每个函数被调用后对a的影响(先乘后加,乘法要更新加的个数) 注意调用顺序; 建立一个虚拟原点0号连接所有调用的点 点击查看代码 #include <vector> #include <s
阅读全文
摘要:Q4.4.6.1. 区间最长不上升子串 BZOJ4491. 我也不知道题目名字是什么 差分, 转化为连续区间上最长 >=0 或 <=0 的区间 每个节点维护区间 前缀最大值, 后缀最大值, 区间答案, 区间长度 类似“小白逛公园” 点击查看代码 #include <iostream> #includ
阅读全文
摘要:BZOJ2219. 数论之神 Q4.1.4.5. 开k次根号 先将模数 mod 分解为若干个 p^k 由题, p为奇质数 只需求 x^A=B(modp^k)的个数 设 p^k 的原根为 g, 由原根的性质, g 是 p 的原根 B==0(modp^k) ,此时只需 x^A 中的 p 的个数 >= k
阅读全文
摘要:Q4.1.2.6. 跳棋 每一个状态(x,y,z)有转移方式: 将中间的棋子向两边移动, 将两边的棋子向中间移动 这两类操作互逆, 如果只考虑第二类操作, 令每次操作得到的状态为父节点, 则变成一棵二叉树 (第二类操作只有至多一个可行) 每次操作就是在二叉树上移动 初始条件和终止条件在二叉树上对应一
阅读全文
摘要:BZOJ1097. [POI2007]旅游景点atr Q3.5.2.1. 旅游景点 设 dis[i][j] 表示 i 到 j 的最短路(需要用 k 次 Dijkstra, 因为 i 到 j 可能经过其他点) 设 f[i][s] 表示现在在 i 节点, 已经走过 s 这些节点(s是{2,3,...,k
阅读全文
摘要:P2254 [NOI2005] 瑰丽华尔兹 设f[i][x][y]表示在第i个时段,钢琴在这个时段停止在(x,y)时的最大滑动激励 转移: dir=1时 f[i][x][y]=max{f[i-1][x+k][y]+k 其中0<=k<=ed-st+1} dir=2时 f[i][x][y]=max{f[
阅读全文
摘要:P3290 SCOI2016围棋 轮廓线DP + KMP 用轮廓线 DP 算出无法匹配的个数, 用 3**(n*m) 减去即可 ..#### f[x][y][s][i][j] 表示 s 为轮廓线, 模板第一行匹配到 i, 模板第二行匹配到 j ##?.?. s 第某位为 0/1 表示模板第一行是否能
阅读全文
摘要:####BZOJ4491 区间最长不上升子串 点击查看代码 // BZOJ 4491 // 差分, 转化为连续区间上最长 >=0 或 <=0 的区间 // 每个节点维护区间 前缀最大值, 后缀最大值, 区间答案, 区间长度 // 类似“小白逛公园” #include <iostream> #incl
阅读全文
摘要:CF891C Envy Q3.2.2.4. MST 边集询问 最小生成树(森林)中相同权值的边数量不变 先求加入第 i 条边后两个点所在连通块 对于每一个权值: 用并查集判断所在连通块是否有环(有则无解) 点击查看代码 #include <iostream> #include <stdio.h> #
阅读全文
摘要:Q3.1.1.4. 边的染色 题目描述 给一个允许有重边和自环的无向图,你需要将每条边染色成红色或蓝色,使得所有度数 的点,都既与一条蓝色边相连,又与一条红色边相连。问是否有解,有解的话输出一组解。 题解 随便找一个点, dfs 无向图 dfs 只有树边和返祖边 树边: 每一层不一样, 根节点...
阅读全文
摘要:BZOJ3910. 火车 Q3.3.2.4. 火车 LCA 求距离 并查集让点不被重复标记 rt 如右图 \ a 到 b 的距离为 lca dep[a]+dep[b]-2*dep[lca] / \ 每次如果这个点被标记过, 则跳过 fa fb 反之, 暴力将这条链上的点标记 / / 并查集优化: a
阅读全文
摘要:P3285 SCOI2014方伯伯的OJ 标签:Splay 如果直接使用平衡树维护编号,空间会开不下($10^8$) 注意到操作只有1e5个,则有些区间的编号在程序结束时仍然没有被改变(即:结束时区间中的编号仍然是 $[l,r]$) 于是一个节点里可以存一个 $[l,r]$ 表示这个节点存了编号为
阅读全文
摘要:P3960 NOIP2017 提高组 列队 将每一行的第1到m-1个和第m列分离出来 分析知这n+1个“区间”要维护弹出第k个和插入最后 使用平衡树,一个区间若没有被算则用[l,r]表示(方伯伯的OJ) 点击查看代码 #include <stdio.h> #include <string.h> co
阅读全文
摘要:RMQ求LCA:使用欧拉序 点击查看代码 #include <stdio.h> #include <string.h> #include <ctype.h> const int IN_SIZE = 200005, OUT_SIZE = 200005; char inbuf[IN_SIZE + 5],
阅读全文
摘要:P3592 [POI2015] MYJ 洗车店 点击查看代码 // 此题与人的区间[a,b]有关:区间DP;将[l,p-1],[p+1][r]的区间递归计算,经过p的区间 // f[l][r][k]表示l<=a<=b<=r的洗车店的价格>=k的最大收费 // f[l][r][k]=max{f[l][
阅读全文
摘要:三维偏序 陌上花开 二维偏序: 先双关键字排序,用双指针算法求出横跨两个区间的个数(另外两种可以递归),然后按b归并排序 三维偏序: 先三关键字排序,用双指针算法求出横跨两个区间的左端点j的区间:用二维的做法(树状数组) 注意相同元素的影响 点击查看代码 #include <stdio.h> #in
阅读全文
摘要:CF468D Tree 以树的重心为根 i和pi不能在同一个子树中 贪心求出方案 点击查看代码 </details> #include <set> #include <stdio.h> #include <string.h> #include <algorithm> const int N = 1e
阅读全文
摘要:P6419 COCI2014-2015#1 Kamp 营地聚会 点击查看代码 #include <iostream> #include <stdio.h> #include <string.h> #include <algorithm> #include <utility> #include <ar
阅读全文
摘要:P2491 SDOI2011 消防 算法竞赛进阶指南 P374 解法3(解法2为P1099 树网的核),7FA4.3.2.5.3, LuoguP2491 SDOI2011 二分答案 mid 在树的直径上找离两端最远且距离小于 mid 的点, 判断其他点是否到这个点的距离均小于等于mid 点击查看代码
阅读全文
摘要:P1600 NOIP2016 提高组 天天爱跑步 LCA + 桶 分为上行和下行 上行: u->v 被i看到: u在i的子树且 dep[u]-dep[i]=w[i], 用桶维护dep[st(=u)]=x的u有多少个 下行: u->v 被i看到: v在i的子树且(u不在) 到lca(u或f[u])的
阅读全文
摘要:P5024 NOIP2018 提高组 保卫王国 f[u][0/1]表示只在以u为根节点的子树(包含u)中最小花费(u:不选/选) g[u][0/1]表示不在以u为根节点的子树(不含u)中最小花费(u:不选/选) w[u][i][0/1]表示u,u<<i不选/选,以u<<i(含)为子树除去以u为根节点
阅读全文
摘要:P5666 CSP-S2019 树的重心 正难则反: 考虑一个点在删除哪些边的情况下会成为重心 将整棵树的重心作为根,设h[i]为i的重儿子的大小 性质: 删除i的子树中的边后i不会成为新连通块的重心 证明: 设之后i所在连通块大小为m 则剩下的sz'[i]=sz[i]-(n-m) 则m-sz'[i
阅读全文
摘要:P3238 HNOI2014道路堵塞 点击查看代码 #include <iostream> #include <stdio.h> #include <string.h> #include <algorithm> #include <utility> #include <array> #include
阅读全文
摘要:BZOJ2104. Wc2009 shortest P4150 [WC2009]最短路问题 一条路线至多掉头4次(因为方格的高为6) 普遍情况:(所有情况均为左边0/2/4次拐弯 左边 右边 和右边0/2/4次拐弯构成) s-+ +-e 当左边三个与y1的交点 | | 和右边三个与y2的交点重合时
阅读全文
摘要:P3638 APIO2013 机器人 区间DP+最短路处理环形DP 设f[l][r][i]表示合并出编号为[l..r]的机器人(在i号格子)的最少步数 转移: 1.合并机器人 2.用最短路转移:使用两个队列模拟堆 点击查看代码 </details> #include <stdio.h> #inclu
阅读全文
摘要:P1983 NOIP2013 普及组 车站分级 差分约束 左边的点代表不必停靠的车站, 右边的点代表需要停靠的车站 对于任意左边的点 x 和右边的点 y , 则 x < y 即 x + 1 <= y o o o \ / o o o o - o - o o o o / \ o o o 图1 图2 若左
阅读全文