07 2019 档案
摘要:有时候我们想快速的知道一个数是不是素数,而这个数又特别的大导致 的算法也难以通过,这时候我们可以对其进行 Miller-Rabin 素数测试,可以很大概率测出其是否为素数。 两个理论基础 (1)费马小定理:当 为质数,有 $a^{p-1}\equiv 1(mod \
阅读全文
摘要:问题 链接 给定n个整数(数字可能重复),求在这些数中选取任意个,使得他们的异或和最大。() 分析 异或和本来没有单调性,但是从高到低遍历线性基是单调的。考虑第 位时,如果当前答案 第 位为0,
阅读全文
摘要:题意 给定一个 个整数的数列,从中至多选取 个上升子序列(一个元素最多被选一次),使得选取的元素和最大。 分析 考虑这个问题和经典网络流问题“最长不下降子序列”相似,我们考虑对这个建图并用网络流解决。因为求得费用和,则使用费用流做法。 具体建图见代码,主要考虑拆点和建立超级源点和超级
阅读全文
摘要:费用流 假设每条边除了有一个容量限制外,还有一个单位流量所需的费用(cost)。该网络中花费最小的最大流称为最小费用最大流,即总流量最大的情况下,总费用最小的流。 和 Edmonds-Karp 算法类似,但每次用 Bellman-Ford 算法而非 BFS 找增广路。只要初始流是该流量下的最小费用可
阅读全文
摘要:题意 链接 定义 为满足以下条件的有序二元组 的方案数(即 与 被认为是不同的方案): 和 均无平方因子(即因子中没有除1之外的完全平方数) 求 $\displaystyle \sum_{i=1}^n
阅读全文
摘要:介绍 基是线性代数中的一个概念,而在现行OI中,通常利用基在异或空间的一些特殊性质来解决问题,而这类问题涉及的知识被称为【线性基】 异或运算下的基: 对于数 将 的二进制表示成 可看作一个向量,异或运算下的
阅读全文
摘要:题意 一张无向图,每条边有权值,可以选择不超过 条路使其权值变成0,求 到 的最短路。(同洛谷 P4568) 分析 首先,分层图最短路可以有效解决这种带有 「阶段性」的最短路,这是分层图最短路的模板题。 建立 层相同的图,每层之间相邻的节点之间也用权值为0的边相
阅读全文
摘要:题意: 一颗 个节点的树上标有 个点,找一点使得到 个关键结点的最大距离最小。 分析: 问题等价于求树的直径,最小距离即为直径除2向上取整。 有两种求法,一是动态规划,对于每个结点,把所有子结点的 (表示根为 的子树中根到叶子的最大距离)都求出来,设 $
阅读全文
摘要:题目描述 给出两个 位10进制数x和y,求x*y(详见 洛谷P1919) 分析 假设已经学会了FFT/NTT。 高精度乘法只是多项式乘法的特殊情况,相当于 时。 例如n=3,求123*111
阅读全文
摘要:问题描述 求一个满足 阶齐次线性递推数列 的第 项,即:. 分析 首先写成矩阵快速幂 $$\left( \begin{bmatrix} f_1 &f_2 &f_3 &f_4 & \cdots &
阅读全文
摘要:问题描述 P4328 给定一个多项式 ,请求出一个多项式 ,满足 。系数对998244353998244353取模。 分析 理论基础 这是一个递推式且呈平方倍增加,就可以用倍增求多项式逆元,从 开
阅读全文
摘要:也许不叫问题吧,也可能是编译器的特性。 我的codeblock选择的编译器: 编写.cpp文件时,floatl类型输入输出都是 %f,double类型输入只能是 %lf,输出只能是 %f。 但是在codeblock建立.c文件和在VS建立.cpp文件,double类型的输出 %f, %lf 都行 好
阅读全文
摘要:普通莫队概念 莫队:莫涛队长发明的算法,尊称莫队。其实就是优化的暴力。 普通莫队只兹磁询问不支持修改,是离线的。 莫队的基本思想:就是假定我得到了一个询问区间[l,r]的答案,那么我可以在极短(通常是O(1))的时间复杂度内得到[l+1,r]的答案——于是对于区间查询类的题目,我可以一次性读完所有询
阅读全文
摘要:概念 分块算法实质上是一种是通过分成多块后在每块上打标记以实现快速区间修改,区间查询的一种算法。其均摊时间复杂度为 分块的基本思想是通过适当的划分,预处理一部分信息并保存下来,用空间换取时间,达到时空平衡。事实上,分块更接近于“朴素”,效率往往比不上树状数组和线段树,但是它
阅读全文
摘要:题目 链接 题意:给定一个数X,输出一个等差数列,使得和为X。 分析 由等差数列的定义,可见一个数就是等差数列,两个数也是等差数列 (只能靠做做水题过日子了...
阅读全文
摘要:题目 链接 题意:在 的大网格上,给出 的格点的坐标,求联通块数(上下左右及对角线都认为相邻) 分析 DFS需要遍历网格的每个格点,可能会超时? 初始化时,对每个格点建立并查集,遍历每个格点将相邻的合并,最终的集合个数就是联通块的个数。 具体实现时,对
阅读全文
摘要:题目 链接 给你一个圆锥(位于坐标原点,告诉你高h 和底面半径 r),和一个点(x,y,z)并告诉你这个点的速度, 让你求点和圆锥相撞的最小时间(保证一定相撞) 分析 易知,将直线的参数方程与圆锥曲面的方程联立,但是可能产生增根,具体情形如下: 其实我们不必区分具体情况,只需交点在曲面上的时间的最小
阅读全文
摘要:概念 可持久化线段树又叫主席树,之所以叫主席树是因为这东西是fotile主席创建出来的。 可持久化数据结构思想,就是保留整个操作的历史,即,对一个线段树进行操作之后,保留访问操作前的线段树的能力。 最简单的方法,每操作一次,建立一颗新树。这样对空间的需求会很大。而注意到,对于点修改,每次操作最多影响
阅读全文
摘要:题目 链接 题意:给出一个长度为 的数列 ,问是否能将这个数列分解为两个长度为n/2的子序列,满足: 两个子序列不互相重叠(是值不能有共同元素,但位置可以交错)。 两个子序列中的数要完全一样,{1, 2} = {1, 2},{1, 2} ≠ {2, 1}。 分析 用两个队列,正反扫
阅读全文
摘要:题目 链接 题意:一个n个数字的序列,最多去掉其中k个,使得连续相同数字序列的长度尽量长 分析 如果不考虑去掉元素,就是普通的尺取。考虑到去元素,则只需做一点修改。 先离散化,再把每种元素的位置用vactor存下来。尺取的时间复杂度只有 ,但是离散化之前需要排序,就成了 $O(n \lo
阅读全文
摘要:题目 链接 在课余会接受一些民间的鹰眼类委托,即远距离的狙击监视防卫.。 一共接收到份委托,这些委托与 个直线排布的监视点相关。第 份委托的内容为:对于区间 中的监视点,至少要防卫其中的 个点。 必
阅读全文
摘要:题目 链接 题意:给定 个整数,去掉其中一个数使得剩下数字的gcd最大,求最大的gcd.() 分析 枚举每一个位置,显然每次枚举都计算所有数的gcd存在大量的重复计算,所以先计算出gcd前缀和gcd后缀。$pre \_ gcd[i] = gcd(a
阅读全文
摘要:求 1..n 之间每个数的逆元,如果都用费马小定理或者扩展欧几里得算,那么复杂度将会达到 。利用一些递推式,可以线性地求出1..n中每个数的逆元,从而复杂度可以减少一个log。常用的一个递推公式是 $$i^{-1} = -\left\lfloor \frac{p}{i}
阅读全文
摘要:差分算子 首先,有一个关于”算子“的定义:如果一个运算作用在函数上,则我们称这个运算为“算子”。 显然,多项式的卷积、狄利克雷卷积等都是算子。 在迈入高等数学的大门时,我们遇到过一个强劲的算子:微分算子。$\text Df(x) = \displaystyle \lim _{h \to 0}\fra
阅读全文
摘要:题目 链接 题意:在一个网格图上,给出个点的坐标,用一个多边形包围这些点(不能接触,且多边形的边只能是对角线或直线),求多边形的最小周长. 分析 对于每个点,我们考虑与之相邻的4个点。一共由 个点,然后求凸包。对凸包上每对相邻的点,优先走对角线,然后走直线。累加长度即
阅读全文
摘要:题目 链接 有n只青蛙,有m块石头,编号为0~m-1,第i只青蛙每次可以跳, 刚开始都在0,问,青蛙总共可以跳到的石头之和为多少。其中,,,. 分析 根据裴蜀定理知,对于一个有n个点的环,每个循环节的长度为n/gc
阅读全文
摘要:定义 设正整数按照算术基本定理分解质因数为,定义函数: $$\mu(N)= \left\{\begin{matrix}0 \ \ \ \ \ \ \ \ \ \ \ \ \ \ c_i \geq 1 \\ 1 \ \
阅读全文
摘要:题目 给定一个的矩形,选择其中为的位置,要求互不相邻,问方案数。 解决方案 直接dp因为状态较多,数组很难直接表示出来,我们采用二进制状态压缩存储。 用表示第行状态的方案数,不难写出状态方程$dp[i][j] += dp[i-1]
阅读全文
摘要:题目描述 链接 如题,已知一棵包含N个结点的树(连通且无环),每个节点上包含一个数值,需要支持以下操作: 操作1: 格式: 1 x y z 表示将树从x到y结点最短路径上所有节点的值都加上z 操作2: 格式: 2 x y 表示求树从x到y结点最短路径上所有节点的值之和 操作3: 格式: 3 x z
阅读全文
摘要:概念 树剖就是将一棵树暴力拆成几条链,然后对于这样一个序列,我们就可以套上资瓷区间处理的一些东西qwq(比如说线段树,树状数组 可以解决的问题: 将树从到结点最短路径上所有节点的值都加上 求树从到结点最短路径上所有节点的值之和/最大值 将以为根节点的子树内所有节点
阅读全文
摘要:题目 链接 题意:对一个数列进行以下两种操作: 给中的每个数开平方(下取整) 询问中各个数的和 解决方法 显然,区间开平方不满足区间可加性,所以对区间中每个数开平方不能通过标记完成,只能使用暴力的单点修改。因为1e12的数开方6次就变成了1,所以需要修改的次数实际上很少。
阅读全文
摘要:题目 题目链接 大意:维护一个数列,有两种操作: 查询操作Q L:查询当前数列中末尾L个数中的最大的数 插入操作A n:将n加上t再对D取模,将所得值插入数列末尾 解决方案 由题意知,只有两种操作:单点修改、区间查询
阅读全文
摘要:add无序,set有序。规定同时有两个标记时,表示先执行set再执行add。 1. 更新操作: 此操作中需要维护标记,这里保证了不会出现先有add再有set,这种情况只会保留set。 值得注意的是,标记下推时左右子树都需要维护,其中递归进入的子树会在递归结束时自然调用maintain函数,而另一个子
阅读全文
摘要:考虑将正整数n拆分成几个不同的平方数之和,比如30=1^2 + 2^2 + 5^2=1^2 + 2^2 + 3^2 + 4^2,而8不存在这样的拆分。 只有31个数无法分解:2,3,6,7,8,11,12,15,18,19,...,108,112,128,在10^18内只有31个,更大的没有验证。
阅读全文
摘要:题目 链接 在一个方格地图上,某些方格上放置着炸弹。手动引爆一个炸弹以后,炸弹会把炸弹所在的行和列上的所有炸弹引爆,被引爆的炸弹又能引爆其他炸弹,这样连锁下去。 现在为了引爆地图上的所有炸弹,需要手动引爆其中一些炸弹,为了把危险程度降到最低,请算出最少手动引爆多少个炸弹可以把
阅读全文
摘要:题目 链接 在蒜国的海岸线上有一排由西向东的瞭望塔,这些瞭望塔由于建造的地面高度不同,所有瞭望塔的高度也是不能不一样的。 这个时候蒜国国王来问蒜头君,每个瞭望塔向东能看到几个瞭望塔?这里需要注意在A塔东边有B塔,B塔的高度高于或等于A塔的高度,那么B塔后面的塔都看不到。 解决方案 由题意知,求左边第
阅读全文
摘要:今天在编译一段C源程序时,遇到编译错误提示 error: variably modified 'data' at file scope。原因在于代码头部有这样几行: 在C语言中,const不是一个真真正正的常量,其代表的含义仅仅是只读。使用const声明的对象是一个运行时对象,无法使用其作为某个量的
阅读全文