摘要: 题目: 链接 题目大意: 给一个可能包含 "ABCD" 的字符串,有一个 D 或两个 C 输出 \(\texttt{failed}\),不然若有三个 A 输出 \(\texttt{sp offer}\),否则输出 \(\texttt{offer}\)。 代码: int n; string s; in 阅读全文
posted @ 2020-10-21 17:42 Jayun 阅读(129) 评论(0) 推荐(0) 编辑
摘要: 参考文章: 【洛谷日报#33】时空复杂度分析及master定理 李卿. 递归算法分析中主定理的应用[J]. 黑龙江科技信息, 2011(29):97+207. Thomas H.Cormen,Charles E.Leiserson,Ronald L.Rivest,Clifford Stein. 殷建 阅读全文
posted @ 2020-10-17 14:06 Jayun 阅读(3533) 评论(1) 推荐(5) 编辑
摘要: 主席树: 可持久化权值线段树也被称为主席树,它通过建新节点来维护历史值,使得能在短时间内查找历史值。 模板题题目链接 讲解: 方法一: 每次二分答案 \(x\),然后求出区间内多少个小于等于 \(x\) 的数。而考虑怎么求,我们可以用权值线段树。把所有数离散化,维护 \(n\) 棵权值线段树,第 \ 阅读全文
posted @ 2020-09-10 21:36 Jayun 阅读(75) 评论(0) 推荐(0) 编辑
摘要: 题目链接: 题目 博客园 题目大意: 快速求: \(\prod_{i=1}^{n}\prod_{j=1}^{m}f_{\gcd(i,j)}\) 其中 \(f_i\) 表示斐波那契数列第 \(i\) 个数。 正文: 在写本题之前,建议先拿 【Luogu P2257】 YY的GCD 练练手。 将原式化为 阅读全文
posted @ 2020-09-08 21:10 Jayun 阅读(114) 评论(0) 推荐(0) 编辑
摘要: 题目链接: 题目 博客园 题目大意: 快速求: \(\sum_{p\in Prime}\sum_{i=1}^{n}\sum_{j=1}^{m}\left[\operatorname{gcd}(i,j)==p\right]\) 正文: 按照莫比乌斯反演的常规套路,将式子化简成我们能接受的时限: \(\ 阅读全文
posted @ 2020-09-03 20:18 Jayun 阅读(120) 评论(0) 推荐(0) 编辑
摘要: 题目链接: 题目 博客园 题目大意: 快速求: \(\sum_{i=a}^{b}\sum_{j=c}^{d}\left[\operatorname{gcd}(i,j)==d\right]\) 正文: 这道题和 [POI2007]ZAP-Queries 思路一样,先化简再整除分块。但是这题不能直接化, 阅读全文
posted @ 2020-09-02 19:18 Jayun 阅读(76) 评论(0) 推荐(0) 编辑
摘要: 题目链接: 题目 博客园 题目大意: 快速求: \(\sum_{i=1}^{n}\sum_{j=1}^{m}\left[\operatorname{gcd}(i,j)==d\right]\) 正文: 将式子化简: \(\begin{aligned}\sum_{i=1}^{n}\sum_{j=1}^{ 阅读全文
posted @ 2020-09-01 20:30 Jayun 阅读(116) 评论(0) 推荐(0) 编辑
摘要: 链接: 题目 博客园 题目大意: 给定一个 \(n\) 个点 \(m\) 条边的带权有向图,每条边的边权为 \(w\quad(w\in\{1,2,3\})\),将所有可能路径按边权排序,输出第 \(k\) 小路径权值。 正文: 此题为 NOI2020D1T1 的阉割版本,设一个矩阵数组 \(F_k\ 阅读全文
posted @ 2020-08-24 08:08 Jayun 阅读(136) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 一个 \(n\) 个点 \(m\) 条边的无重边无自环的无向图,点有点权,边有边权,定义一条路径的权值为路径经过的点权的最大值乘边权最大值。求任意两点间的权值最小的路径的权值。 正文: 一道 Floyd 练手题,存下每条路的最大点权与边权,在 Floyd 的时候一起运算,Floyd 时升 阅读全文
posted @ 2020-08-23 20:12 Jayun 阅读(112) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 求出一个集合中所有数所不能凑出来的最小的数是多少。 正文: 神怖题,拿几个数据自己手玩一下就能发现规律:一个从小到大的序列若 \(a_i>sum_{i-1}+1\)(其中 \(sum_{i}\) 表示从一到 \(i\) 的数的总和),那么凑不出来的最小的数就是 \(sum_{i-1}+1 阅读全文
posted @ 2020-08-23 15:44 Jayun 阅读(81) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 有 \(c\) 块钱、\(a\) 个 A 材料和 \(b\) 个 B 材料,造第 \(i\) 层楼需要 \(i\) 个 A 材料与 \(i\) 个 B 材料,每块钱都可以用来买 $1$ 个 A 材料或者 $1$ 个 B 材料。 正文: 暴力枚举第 \(i\) 题就行了。 代码: int 阅读全文
posted @ 2020-08-22 21:37 Jayun 阅读(162) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 求: \(\min_{x\in\mathbb{N}^*}\left\{\sum_{i=1}^{n}\left\lfloor \frac{a_i}{x}\right\rfloor +a_i\bmod x\right\}\) 正文: 将式子化简: \(\begin{aligned}&=\mi 阅读全文
posted @ 2020-08-22 21:20 Jayun 阅读(81) 评论(0) 推荐(0) 编辑
摘要: 链接: 题目 博客园 题目大意: 给定一个有 \(n\) 个节点的有向图,每一个点有点权,在某些时候达到某些点能获得额外值,从点 1 出发,问 \(t\) 天后回到点 1 的最大价值。 正文: 方法一: 直接无脑DP,设 \(f_{i,j}\) 表示第 \(i\) 天时正好到点 \(j\) 的最大价 阅读全文
posted @ 2020-08-21 16:29 Jayun 阅读(447) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 给几个操作,每次操作给出一个只包含 ‘W’、‘I’、‘N’、‘G’ 的字符串加入一个库里,再给出几个询问,每次询问求出被查询串最早第几次加入库。 正文: 神怖题,开个桶记录某字符第几次入库。 代码: inline int read(){ char ch = getchar(); int 阅读全文
posted @ 2020-08-20 20:51 Jayun 阅读(91) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 给一个正整数 \(X\),一个长度为 \(m\) 的X-因子链是指这样一个序列:\(X_0=1,X_1,X_2,\cdots,X_m=X\) 满足:\(X_i<X_{i+1},X_{i|Xi+1}\),求X-因子链的最大长度和最大长度的X-因子链的数量。 正文: 神怖题,由于长度最长,所 阅读全文
posted @ 2020-08-20 20:28 Jayun 阅读(88) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 给出几个字母,字典序输出从小到大且有一个元音字母和两个辅音字母的字符串。 正文: 神怖题,爆搜。 代码: void dfs(int x, int len, int Yuan, int Fu) { if(m - x + 1 + len < n || flag) return; if(len 阅读全文
posted @ 2020-08-20 20:19 Jayun 阅读(274) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 现在给出一个仙人掌图(即每条边最多只出现在一个环里),给出多个询问,每个询问求出两点的最短距离。 正文: 概述: 仙人掌是图,由于时空限制,直接求多源最短路径会超时超空,所以我们通过 圆方树 来将其转化为树上问题。 圆方树: 关于圆方树,要讲得通俗易懂,原图里每个节点都是原点,将每个环里 阅读全文
posted @ 2020-08-18 21:14 Jayun 阅读(118) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 定义一种特殊的三元组:\((x,y,z)\),其中 \(x,y,z\) 都代表纸带上格子的编号,而且要求满足以下两个条件: \(x<y<z,y-x=z-y\quad(x,y,z\in\mathbb{Z})\)。 \(color_x=color_y\)。 最后求出所有三元组价值之和,每个三 阅读全文
posted @ 2020-08-17 15:08 Jayun 阅读(95) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 求 \(n!\) 在 \(base\) 进制下末尾有多少个零。 正文: 在 \(base\) 进制下某位到了 \(base\) 就进一,也就是说分解 \(base\) 的质因子,然后各个质因子匹配,由于匹配时,就算某个质因子再多,若其它质因子为零那最后的价值也只能为零,所以每个质因子的价 阅读全文
posted @ 2020-08-17 14:47 Jayun 阅读(109) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 给定一个 \(N\times M\) 的矩阵,矩阵上每一个点可能是狼、空地或者羊,你要在某些点的某几个边界方篱笆使得任意狼、羊不能互通。 正文: 由于每一个单位的篱笆把两个相邻的点分开,想到用最小割,原点向羊连一条无穷大的边,羊向空地和狼连一条边权为一的边,空地向其它空地和狼连边权为一的 阅读全文
posted @ 2020-08-16 21:21 Jayun 阅读(159) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 一段长 \(n+m\) 的序列,其中 \(n\) 个是 1,\(m\) 个是 0。对序列排列求它所有前缀和的最大值的和。 正文: 如图,其实我们就是要从点 \((0,0)\) 到点 \((n+m,n-m)\),\(x\) 轴为走的步数,\(y\) 轴为最大前缀和。假设我们强制到 \(y\ 阅读全文
posted @ 2020-08-15 07:53 Jayun 阅读(178) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 给定 \(N\) 个数,将它们依次插入一双端队列,将整个队列从尾到头看做一序列,问最大的最长上升子序列。 正文: 本题思路及其巧妙,因为队列是双端的,可以在输入的序列之前倒着排一遍(如输入的序列是$A={1,2,4,3}$,操作后为 \(A={3,4,2,1,1,2,4,3}\),),又 阅读全文
posted @ 2020-08-14 17:43 Jayun 阅读(143) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 求有多少长度为 \(n\) 的正整数序列,满足任意两个相邻的数的乘积不超过 \(M\)。 正文: 考虑用动态规划,设 \(f_{i,j}\) 表示第 \(i\) 位填 \(j\) 时的方案数,则转移方程是: \(f_{i,j}=\sum_{k=1}^{\frac{M}{j}}f_{i-1 阅读全文
posted @ 2020-08-14 17:14 Jayun 阅读(174) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 给定 \(N\) 个点,每个点可能有一个标记,可以通过 \(c_{i,j}\) 知道区间 \([i,j]\) 的奇偶性,问你至少需要花费多少,才能保证猜出哪些点有标记。 正文: 求导过程: 我做题时开始想的是通过知道两个区间 \([l,r-1],[l,r]\) 的奇偶性直接得到 \(r\ 阅读全文
posted @ 2020-08-13 22:31 Jayun 阅读(96) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 给定长度为 \(n\) 的数组 \(S\),你需要统计有多少个四元组 \((a,b,c,d)\) 满足:$1\leq a<b\leq n;1\leq c<d\leq n;S_a<S_b;S_c>S_d$,且 \(a,b,c,d\) 互不相等。 正文: 利用容斥的思想,把所有 \(S_a< 阅读全文
posted @ 2020-08-13 21:27 Jayun 阅读(98) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 求 \(\sum_{i=l}^{r}(i-\varphi(i))\mod 666623333\)。 正文: 方法一: 预处理出所有的欧拉函数值,直接求 \(\sum_{i=l}^{r}(i-\varphi(i))\mod 666623333\)。但是 $1\leq l\leq r\leq 阅读全文
posted @ 2020-08-13 18:41 Jayun 阅读(73) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 求长度为 \(n\) 的排列,逆序对个数小于等于 \(k\) 的排列个数。 正文: 设 \(f_{i,j}\) 表示前 \(i\) 位有 \(j\) 个逆序对的方案数,由于第 \(i\) 位能为前 \(i-1\) 位贡献,动态转移方程是: \(f_{i,j}=\sum_{l=0}^{i- 阅读全文
posted @ 2020-08-13 16:59 Jayun 阅读(146) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 求字典序第 \(N\) 大的只含 \(k\) 个 1 的 01 串。 正文: 考虑到用组合数,由于首位一定是 1,那么我们需要选择位置的 1 就只有 \(k-1\) 个,枚举 01 串长度 \(len\),长度为 \(len\) 的 01 串个数是 \(C_{len}^{k-1}\),每 阅读全文
posted @ 2020-08-13 11:35 Jayun 阅读(77) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 三个棋子在 \(a,b,c\) 位置,通过题目给出的跳动规则,问能否跳到 \(x,y,z\),如果能,最少多少步? 正文: 假设三个棋子分别在 \(a,b,c\quad(a<b<c)\),跳动规则其实就三个: \(b\) 向 \(a\) 跳。 \(b\) 向 \(c\) 跳。 \(a,c 阅读全文
posted @ 2020-08-12 21:50 Jayun 阅读(103) 评论(0) 推荐(0) 编辑
摘要: 错误修改: upd:2020/8/22 :举例说明时数据列错了 题目大意: 给定一棵 \(n\) 个点的无根树,有 \(q\) 次询问。每次询问给一个参数三元组 \((a,b,c)\),求有多少个 \(i\) 满足这棵树在以 \(i\) 为根的情况下 \(a\) 和 \(b\) 的 LCA 为 \( 阅读全文
posted @ 2020-08-12 16:24 Jayun 阅读(129) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 给定一个 \(n\) 个节点的无向图,从 $1$ 出发到 \(n\) 的路径中,\(k\) 条路径长度可变为 $0$,操作完后路径必须是最短的,问操作完后的最长路段长度。 正文: 最短路径中的最长路段,由此想到通过二分答案求解,二分一条线的权值 \(w\),\(w\) 作为最短路中最长路 阅读全文
posted @ 2020-08-12 15:39 Jayun 阅读(105) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 在一个 $5\times 5$ 的地图内每一个格子都有一个不超过 $10$ 的数,你能从任意格子开始走,上下左右四个方向走 $5$ 步,问最后的六位数有多少种。 正文: 暴力搜索。 代码: void dfs(int x, int y, int step, int val) { if(st 阅读全文
posted @ 2020-08-12 15:24 Jayun 阅读(84) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 一颗 \(n\) 个节点的树,一段路径的长度是每个点一奇一偶取相反数,求这棵树内经过道路数为奇数的 \(k\) 短路。 正文: 搜索出每一个节点到根节点的长度 \(dis_i\),然后树的奇偶层分成两个部分,然后两个部分进行匹配。 题目大意: struct edge { ll from, 阅读全文
posted @ 2020-08-11 20:31 Jayun 阅读(76) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 建造一个水库需要花费 \(w_i\),连接两块土地需要花费 \(P_{i,j}\),计算所有土地都有水时所需的最少代价。 正文: 在 $0$ 处建立一个超级原点就可直接最小生成树。 代码: int FIND(int x){return (x==fa[x])?x:fa[x]=FIND(fa 阅读全文
posted @ 2020-08-11 20:00 Jayun 阅读(56) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 求 \(\sum_{i=1}^{n}\sum_{j=i}^{n}[\gcd(i,j)==i\oplus j]\)。 正文: 如果你实在想不出正解,你可能会用暴力把一段大范围以内的所有数对以及它们最大公约数(异或值),你会发现 \(i-j=k\)(\(i,j\) 表示数对里的两个数,\(k 阅读全文
posted @ 2020-08-11 19:50 Jayun 阅读(117) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 一棵树,判断 \(a\) 节点到 \(b\) 节点的最短路径是否与 \(c\) 节点到 \(d\) 节点的最短路径相交。 正文: 容易得到,若两条路径相交,那么某条路径的公共祖先位于另一条的路径里。既然这样,那问题就简化为了判断某条路径的公共祖先是否位于另一条的路径里。 代码: { q. 阅读全文
posted @ 2020-08-10 21:36 Jayun 阅读(79) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 给定 \(Q\) 个询问,每个询问给出 \(u,v\),求从 \(u\) 走到 \(v\) 的期望步数。 正文: 设 \(f_i\) 表示第 \(i\) 个点到其父节点的期望步数,\(g_i\) 表示其父节点到第 \(i\) 个点的期望步数。则有: \(f_x=\frac{1}{deg_ 阅读全文
posted @ 2020-08-10 20:52 Jayun 阅读(98) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 初始点在 \(A\),\(n\) 个单位时间后在 \(B\),一个单位时间可上下不超过 \(d\),问这过程中最高可达多少米。 正文: 方法一: 思路: 可以先跳到够的着 \(B\) 的位置,再将时间分成两份,一份去够最高点,一份从最高点回 \(B\)。 代码: int main() { 阅读全文
posted @ 2020-08-10 17:47 Jayun 阅读(83) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 根据题目规则展开字符串。 正文: 模拟题,有些细节不能大意。 代码: int main() { scanf("%d%d%d", &p1, &p2, &p3); scanf("%s", str); for (int i = 0; i < strlen(str); i++) { if(str 阅读全文
posted @ 2020-08-10 17:33 Jayun 阅读(218) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 给定一个括号队列,\(m\) 个操作:改变一段区间的所有括号或查询一段区间还需多少括号。 正文: 考虑用线段树维护括号串中一个区间内多余的左右括号数(用 \(left,right\) 代替)。 \(\begin{aligned}\therefore t_{x}.left & =t_{2x 阅读全文
posted @ 2020-08-09 21:37 Jayun 阅读(83) 评论(0) 推荐(0) 编辑