- 博客(1495)
- 收藏
- 关注
原创 CF1398G Running Competition FFT
求最大的 $2(a_{i}-a_{j}+y)|L$. 其中 $a_{i}-a_{j}$ 只可能有 $x$ 种结果.这个显然可以用 FFT 来算可行性. 然后调和级数更新就可以了. FFT 中复数的运算什么的要注意一下,不要写错. 单位根是 $(cos(\frac{pi}{l}),i*sin(\frac{pi}{l}))$ 代码:#i...
2020-08-15 12:12:00 511
原创 Luogu「StOI-2」简单的树 树链剖分+线段树+倍增
考场的时候智障了,写了 6k+ 的树链剖分. 如果题目带修改的话可以用树链剖分来维护,但由于没有修改用一个前缀和其实就够了.求 $\sum_{i=l}^{r} f(a,i)$ 可以写成两个前缀相减的形式.然后我们就要求 $\sum_{i=0}^{r} f(a,i)$. 求这个的话用倍增讨论 $a$ 的初始值的影响范围,因为在影响范围内刚开始都是由子树中次大值来贡...
2020-08-14 09:37:00 297
原创 LOJ#3145. 「APIO2019」桥梁 分块+可撤销并查集
看到这道题时没有什么思路,只会打暴力,而且数据范围比较有迷惑性,那基本就是分块了. 现在有两个暴力: 1.每次 $O(1)$ 更新边权,然后 $O(m)$ 暴力查询一个点的答案.2.每次将所有边排序,然后 $O(1)/O(\log n)$ 查询点权 上述两种做法中查询与更新的时间复杂度很不平衡,所以考虑对操作进行分块来维持平衡. 令每一个块的大小为 $B$,将 $B$ 中所有...
2020-08-12 20:30:00 323
原创 【UNR #4】序列妙妙值 分块+DP
只会 80pts.最裸的暴力(40pts) 令 $f[i][j]$ 表示当前 DP 到 $i$,划分成了 $j$ 段的最小值.时间复杂度 $O(n^2)$ 一点优化(60 ~ 80pts)有几个测点 $a[i]$ 很小,那么可以直接开一个桶 $s[i][j]$ 表示前缀异或和为 $i$,且划分 $j$ 段的最小值. 修改复杂度:$O(1)$,查询复杂度 ...
2020-08-12 15:21:00 640
原创 LuoguP5008 [yLOI2018] 锦鲤抄 tarjan+贪心
首先,如果是一个 DAG 的话入度不为 0 的点肯定可以都选. 然后如果是一般图的话我们缩点,考虑对于一个强连通分量如何处理:如果该强连通分量入度为 0 ,那么一定有一个点不能选,其他点都能选.如果该强连通分量入读不为 0,那么肯定所有点都可以选. 由于缩完点后是一个 DAG 的形式,我们一定可以按照拓扑序从后往前来选. 这样就可以在上述两个限制下...
2020-08-11 16:47:00 138
原创 LuoguP1654 OSU! 概率与期望
感觉数学期望这里始终都没太学明白. 期望在任何时候都具有线性性,即 $E(a+b)=E(a)+E(b)$,这个式子任何时候都成立. 先考虑求 $x$,$x^2$. 令 $x1[i]$ 表示 $i$ 为 $1$ 向前的极长 $1$ 的期望长度,$x2[i],x3[i]$ 为 $x^2,x^3$ 的期望.那么考虑从 $i-1$ 那里转移过来,就是 $E(j+1)=E(j)+E(1)=E...
2020-08-11 14:09:00 112
原创 Comet OJ - Contest #8 神奇函数 莫比乌斯反演+欧拉函数
令 $x=\prod p_{i}^{a_{i}}$ 则 $f(x)=\prod p_{i}^{\frac{a_{i}}{2}}$ 也就是说 $f(x)$ 等于最大的 $y$ 满足 $y^2|f(x)$ $\sum_{i=1}^{n} f(i)$ 可化为 $\sum_{i=1}^{ \sqrt{n}} i \times g(\frac{n}{i^2})$ 其中 $g...
2020-08-11 13:56:00 142
原创 LOJ#2719. 「NOI2018」冒泡排序 DP+组合+树状数组
神仙题. 代码:#include <cstdio>#include <vector>#include <cstring>#include <algorithm> #define N 2000004 #define ll long long #define mod 998244353#define setIO(...
2020-08-10 22:08:00 107
原创 LuoguP6747 『MdOI R3』Teleport 二进制+贪心
令 $f[i]$ 表示考虑第 $1$ ~ $i$ 位的最小代价.由于要求最大化 $k$,所以从高位向低位贪心. 判断的话就判一下当前二进制位选 1 的代价加上 $f[i-1]$ 是否小于等于 m. 如果可以选就贪心选 1.这道题比较容易爆精度,long long 可能会乘爆,所以判一下两个 long long 相乘是否为负数. 代码:#include ...
2020-08-10 15:14:00 188
原创 LuoguP6748 『MdOI R3』Fallen Lord 树形DP+set
首先,肯定没有不合法情况(每条边的权值都赋值为 $1$ 就一定合法) 然后对于一条边 $(x,y)$ 来说,只可能有 3 种取值.1. 取 $a[x]$2. 取 $a[y]$3. 取 $m$ 然后转化成这一步后就可以进行树形 DP 了.令 $f[x][0],f[x][1]$ 分别表示以 $x$ 为根的子树,且 $x$ 与 $x$ 父亲连边的边权小于等于 ...
2020-08-10 15:03:00 159
原创 LuoguP5576 [CmdOI2019]口头禅 后缀树+线段树+暴力
一个比较暴力的解法.先对所有串建出广义后缀自动机提取出后缀树然后按照询问的右端点离线. 考虑插入第 $i$ 个串,那么会被 $i$ 及 $i$ 的祖先遍历到的点的表示范围会从 $[l,r] \rightarrow [l,r+1]$. 未被遍历到的点的表示范围出现了一个“断点”,则表示范围就是 $i$ 之后最近的串 $j$,$[j,j]$. 将串在自动机上匹配的复...
2020-08-10 08:54:00 164
原创 LOJ#3161. 「NOI2019」I 君的探险 整体二分+随机化+二进制分组
比较神仙的随机化+交互题. 测试点 $1$ ~ $5$ : 限制条件不强,可以直接点亮一条边中编号小的点 $x$,然后再枚举编号大于 $x$ 的点.操作次数:$O(n)$查询次数:$O(n^2)$ 测试点 $6$ ~ $9$:图的形态是点两两匹配. 这里有两种做法:1. 随机化 假设当前要分点集 $A$ 中的点,那...
2020-08-06 15:15:00 180
原创 LOJ#2085. 「NOI2016」循环之美 莫比乌斯反演+杜教筛
求:$\sum_{i=1}^{n} \sum_{j=1}^{m} [(i,j)=1][(j,k)=1]$这个时候可以拆前面的,也可以拆后面的.由于后面的 $k$ 是一个定值,考虑拆解后面的部分.得:$\sum_{d|k} \mu(d) \sum_{i=1}^{n} \sum_{j=1}^{\frac{m}{d}} [(i,jd)=1]$$\Rightarrow \sum_{d|k...
2020-08-05 15:26:00 166
原创 【考试题 - sequence】DP
没有测试数据,但是和正解对拍了 400 多组数据都过了. 手画一下发现每个数如果变化的话只有 3 种情况:$-1,0,1$. 感性理解的话一个数变小的话对前面更优,对后面更劣. 但是我们发现不可能存在一个数使得该数变小后会导致后面的数也变小.这是因为如果该数变小的话说明该数和前缀最小值已经构成 $max$,而如果后面的数大于当前数的话显然只需要分析前缀最小...
2020-08-04 16:04:00 130
原创 LOJ#3124. 「CTS2019 | CTSC2019」氪金手游 容斥+DP
神仙容斥+DP可还行.code:#include <cstdio> #include <cmath> #include <vector>#include <cstring>#include <algorithm> #define N 1007 #define ll long long #d...
2020-08-04 14:54:00 170
原创 LOJ#2569. 「APIO2016」最大差分 分块+交互
比较有趣的交互题. subtask1: 由于每次调用这个函数可以返回值域中的最大值和最小值,所以可以每次查询出两个元素. 那么每次查到 $x,y$ 后就将查询区间缩小为 $[x+1,y-1]$,这样可以在规定操作次数内解决问题. subtask2: 这个 subtask 比较困难.首先,我们发现答案的下界是 $B=\frac{Max-Min}{n-...
2020-08-04 09:38:00 226
原创 LOJ#2567. 「APIO2016」划艇 离散化+DP
运用到了 NOI2019 机器人那道题的技巧. 考虑对区间进行离散化,然后设当前枚举到的两个端点为 $[l,r]$.先处理 $[l,r)$,会遇到 $\sum_{i=1}^{n} \binom{len}{i} \binom{k}{i}$ 这个式子.这个式子可以直接 $O(1)$ 组合数算,但是我比较懒用 $O(n^2)$ 递推算的(反正不影响总复杂度) 处...
2020-08-03 22:20:00 263
原创 LOJ#3157. 「NOI2019」机器人 DP+拉格朗日插值
NOI2019 两道插值可还行. 一个数不可能向右移动到超过后缀最大值的位置,也不可能向前移到前缀最大值之前的位置.那么就考虑基于最大值的分治(DP) 令 $f[l][r][x]$ 表示当前区间为 $[l,r]$ 最大值为 $x$ 的方案数. 然后转移的话枚举 $k$ 为最大值出现的位置(有多个的话则是最后出现的位置). 那么就将问题分成两个子问题了,时间...
2020-08-03 16:48:00 204
原创 BZOJ4832 [Lydsy2017年4月月赛]抵制克苏恩 记忆化搜索
概率DP+记忆化搜索.直接记忆化搜索感觉比较显然+简单.直接设状态 $f[x][a][b][c]$ 表示还剩 $x$ 轮,当前牌的状态为 $(a,b,c)$ 还期望造成的伤害.转移的话就是倒着转移:$f[x][a][b][c] \leftarrow f[x-1][.....]$. 然后边界的话将 $f[1][.....]$ 直接设为此时造成伤害的期望. ...
2020-08-03 14:18:00 117
原创 LOJ#3271. 「JOISC 2020 Day1」建筑装饰 4 DP+找规律
有一个非常显然的 DP: $f_{i,j,0/1}$ 表示当前 $DP$ 到 $i$,选了 $j$ 个 A,当前位置选的是 A/B 是否可行.状态数为 $O(n^2)$,转移为 $O(1)$,时间复杂度为 $O(n^2)$. 这个时候就要动用人类智慧:打表. 打表后发现当 $i,0/1$ 固定的时候 $j$ 的合法状态是一个连续段.所以对于 $f_{i,0/...
2020-08-03 11:07:00 186
原创 LOJ#3160. 「NOI2019」斗主地 打表+拉格朗日插值
裸做的话设一个 $p[i][j]$ 表示两个堆分别抽走 $i,j$ 个的概率. 转移的话就枚举当前是第几个,然后再枚举左/右面由下向上第几个贡献. 不在模意义下做,开 double 打表发现无论怎样洗牌,一次函数还是一次函数,二次函数还是二次函数. 那么我们只需暴力维护出牌的前 3 项,然后后面的项用拉格朗日插值求出即可.code:#include &...
2020-08-03 10:07:00 150
原创 CF1386C Joker 双指针+动态树
双指针+LCT. 在二分图那道题中,有一种用 LCT 维护奇环的方法. 该题的做法和那道题相似. 对于 $i$,维护 $left[i]$ 表示当删除 $i$ 时最靠左的端点使得删掉 $[left[i]+1,i]$ 后仍然存在奇环. 那么最后判断答案的时候就看 $(l,r)$ 中的 $l$ 是否大于 $left[r]$ 即可. 由于删掉...
2020-07-30 15:59:00 189
原创 LuoguP2605 [ZJOI2010]基站选址 线段树优化DP
比较好的一道题 DP 题. 令 $f[i][j]$ 表示覆盖前 $i$ 个基站且 $i$ 位置上维修了基站的最小代价. 注意:上面设的状态是不考虑 $[i+1,n]$ 的. 转移的话 $f[i][j] \leftarrow f[k][j-1]+calc(j-1,i)$. 其中 $calc(i,j)$ 表示 $i$ 和 $j$ 分别修了基站的情况下 $i,j...
2020-07-29 16:58:00 118
原创 LuoguP6694 强迫症 找规律+NTT
比赛的时候切的,可惜没抢到首 A.权值和等于 $\sum_{i=1}^{n} \sum_{j=i+1}^{n} a_{i} \times a_{j} \times f(j-i+1) \times f(n-j+i+2)$,最后再除以 4.然后这里的 $f(n)$ 就代表 $n$ 个点构成的圆环的不相交生成子图的方案数.可以将前 $5$ 项打表打出来,上 $OEIS$ 找到通项公式...
2020-07-29 15:56:00 122
原创 【考试题 - txdy】 枚举+DP
题意:给定一个字符串,求有多少个子序列满足该子序列长度为 $7$,且位置所对应字母在子序列中排名为 3652415. 观察发现如果枚举 $3,5,2$ 上的字母的话其他字母插入方式只有 1 种,即不会引起冲突. 然后就令 $f[x][i]$ 表示 DP 到 $i$ 位置,匹配了子序列第 $x$ 位置的方案数,转移方式只有 1 种.严格来说,这个的复杂度是 $O(26^3...
2020-07-29 15:35:00 521
原创 【考试题 - 排列】 分治+树形DP
题意:求有多少种排列满足 $i$ 之前第一个小于 $i$ 的位置是 $q[i]$.如果没有 $q[i]$ 的限制,答案就是全排列,然后 $q[i]$ 会限制一些元素之间的大小关系.直接做的话没办法方便地求出元素之间的大小关系. 不妨思考单调栈的过程:如果遇到前缀最小值的话肯定会将栈清空.那么也就是说如果最小值 $i$ 将序列分为 $L,R$,则 $L,R$ 之间相互...
2020-07-29 15:21:00 100
原创 LOJ#3058. 「HNOI2019」白兔之舞 单位根反演+矩阵乘法+MTT
毒瘤多项式. 找原根+矩阵乘法+拆系数FFT大杂烩. code:#include <vector>#include <cmath>#include <cstdio> #include <cstring>#include <algorithm> #define N 100009 #defin...
2020-07-28 14:09:00 120
原创 LOJ#3087. 「GXOI / GZOI2019」旅行者 二进制分组+Dijkstra
通过这道题了解二进制分组. 由于我们只需要求两两之间最短路的值而不需要求具体是哪两个点得到的最短路,可以使用二进制分组. 因为如果两个点对答案有贡献,那么这两个点一定在某个二进制位上不同,而 dijkstra 可以方便地求两个集合之间的最短路. 然后注意对于两个方向要分别跑一个 dijkstra. 总时间复杂度为 $O( (n+m) \log (n...
2020-07-27 21:35:00 157
原创 LOJ#2302. 「NOI2017」整数 线段树+压位
裸做的话是 $O(n \log^2 n)$ 的,即将 $a$ 进行二进制拆分,然后暴力更新. 考虑进行压位,即线段树的每一个叶节点维护长度为 $30$ 的状态. 加法操作如果需要进位的话就找到其后面的块中第一个 0 所在位置. 减法操作如果需要借位的话就找第一个 1. 第一个 0 与第一个 1 都可以用线段树维护,即 $f0,f1$ 分别表示前缀 0/1 的...
2020-07-27 20:48:00 117
原创 UOJ#523. 【美团杯2020】半前缀计数 后缀自动机
比较好的一道后缀自动机题. 先枚举必选的前缀 $[1,k]$ 然后加上 $[k+1,n]$ 中本质不同子串个数. 但是这样的话会算重.考虑哪些地方算多了: 假设 $i-1$ 的前缀为 $pre[i-1]$,然后当前的前缀为 $pre[i-1]+x$.那么当前肯定会枚举到 $pre[i-1]+(x.....)$,而这一部分在 $pre[i-1]$ ...
2020-07-27 10:42:00 128
原创 LuoguP6688 可重集 线段树+hash
线段树加 hash 判重模板题.hash 的话必须要用双 base 哈希,否则会 WA. 然后这道题中最好不要用自然溢出,感觉比取模还要慢一些. 由于读入量巨大,必须要开读入优化才能过. 哈希的方式就是对于每个数维护 $\sum base^{num[i]}$,由于值域不大,提前预处理出来 base 的 num 次方即可. code:#inclu...
2020-07-27 08:06:00 424
原创 LuoguP6687 论如何玩转 Excel 表格 树状数组
找规律+猜结论. 不难发现这个旋转 180 度其实是对于一个 $2 \times 2$ 的正方形内部对角线分别交换. 所以对于这个 $2 \times n$ 的数组来说可以将所有格子分成两类,这两类互不干扰. 那么判断是否合法的条件之一就是初态和末态对应种类的格子应该相同. 即 $(1,1)$,$(2,2)$,$(3,1)$,$(4,2)$ 与 $(1,...
2020-07-27 08:03:00 159
原创 LOJ#2303. 「NOI2017」蚯蚓排队 hash+链表
正常来说,单次操作的复杂度是 $O(k^2)$,然后整体复杂度是 $O(nk^2)$. 但是我们发现每次合并两个蚯蚓的复杂度的极限是 $O( min(size_{min},50) \times 50)$.然后根据启发式合并的复杂度分析,即使要求遍历完 $size_{min}$,复杂度最高也就是 $O(n \log n k)$. 这个的极限也就是 $O(10^8)$ 左右,...
2020-07-27 07:51:00 146
原创 LOJ#6289. 花朵 树链剖分+分治NTT
本来以为这道题会非常难调,但是没想到调了不到 5 分钟就 A 了.由于基于多项式的运算都可以方便地进行封装,所以细节就不是很多(或者说几乎没有细节) 题意:给定一棵树,每个点有点权,求对于所有大小为 $m$ 的独立集的点权之积的和. 数据范围:$n,m \leqslant 8 \times 10^4$.先考虑一个十分显然的 $O(n^2)$ 暴力:令 $f[...
2020-07-25 08:30:00 464 1
原创 LOJ#2541. 「PKUWC2018」猎人杀 容斥+分治NTT
真——分治NTT code:#include <cstdio> #include <vector>#include <cstring>#include <algorithm> #define N 100009#define ll long long #define mod 998244353#def...
2020-07-24 10:24:00 123
原创 LuoguP4931 [MtOI2018]情侣?给我烧了!(加强版) 组合
不妨枚举哪些位置和睦,然后计算其他位置都不和睦的方案数. 令 $f[i]$ 表示 $i$ 对情侣都不和睦的方案数.然后 $f[i]$ 的转移和错位排列比较相似,即让情侣 $(i,i')$ 与 $(x,y)$ 合并或者 $(x,x')$ 合并.前者对应 $f[i-2] \times 2 \times (i-1)^2 \times i$,后者对应 $f[i-1] \times...
2020-07-24 09:08:00 158
原创 LOJ#2540. 「PKUWC2018」随机算法 状压DP+组合
令 $f[S]$ 表示所选的排列可以生成出 $S$ 的最大独立集且点集 $S$ 全部在序列中的方案数. 那么我们选一个没有被覆盖的点 $j$,令 $sta[j]$ 表示 $j$ 及 $j$ 覆盖的点集. 那么有 $f[S|sta[j]] \leftarrow f[S] \times A(n-|S|-1,|sta[j]|-|sta[j] \bigcap S|)$ ...
2020-07-23 21:40:00 127
原创 LOJ#3302. 「联合省选 2020 A | B」信号传递 状压DP+卡常
对于 $x,y$ 如果 $x$ 在 $y$ 的左面那么 $x \rightarrow y$ 的贡献是 $pos[y]-pos[x]$$y \rightarrow x$ 的贡献是 $pos[x] \times k+pos[y] \times k.$令 $f[S]$ 表示集合 $S$ 在序列开头,且考虑所有贡献的情况下的最小值. 那么转移 $f[S]$ 是十分简单的,但是我...
2020-07-23 17:00:00 195
原创 LOJ#3120. 珍珠 容斥+生成函数+NTT
神仙多项式可还行. code:#include <cstdio> #include <vector>#include <cstring>#include <algorithm> #define N 100009 #define ll long long #define mod 998244353#def...
2020-07-22 16:30:00 134
原创 LOJ#575. 「LibreOJ NOI Round #2」不等关系 容斥+分治NTT
容斥+分治NTT. 令 $dp[i]$ 表示以 $i$ 结尾的方案数.如果只有小于号的话 $dp[i]$ 是非常好求的:$\frac{n!}{\prod a_{i}}$ 即总阶乘除以每一个小于号连续段. 有大于号的时候考虑容斥: 遇到第一个大于号的时候先不考虑当前位置关系,方案数就是 $dp[j] \times \binom{i}{i-j}$. 那么我们...
2020-07-21 17:43:00 173
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人