08 2023 档案
摘要:plaese kill me. && don't forget me. #### 题目描述 给定 $n$ 个字符串 $s_i$ 只包含 ```0,1,2```,现在要捏一个序列 $A$,$s_i$ 表示 $a_i$ 可以捏成什么。```1,2,3``` 形成环形吊打关系,$\omega(X)$ 表示
阅读全文
摘要:[link](https://www.luogu.com.cn/problem/P4809) 最无聊的时候写的最~~啰嗦~~详细的题解。 #### 题目描述 给定一个 $n\times m$ 的点阵和两类边,第 $i$ 行 $j$ 列的城市我们叫祂城市 $(i,j)$。 横边:给定 $p$ 个三元组
阅读全文
摘要:#### 第一届竞赛时间 全国青少年信息学奥林匹克竞赛(NOI) 1984 全国青少年信息学奥林匹克联赛(NOIP) 1995 国际信息学奥林匹克竞赛(IOI) 1989 亚太地区信息学奥林匹克竞赛(APIO)2007 #### 人物 冯·诺依曼(Neumann) + "计算机之父",ENIAC和E
阅读全文
摘要:#### t1 火柴 设计 $f[i]$ 为 $i$ 跟火柴最多的长度,$g[i]$ 为 $i$ 根火柴应选哪个放在首位。 考虑到前一位的重要性吊打后一位,显然让 $f[i]$ 尽量大优先,不然就是 $g[i]$ 取大。考虑记忆化搜索(DP)即可。 ```cpp #include #define i
阅读全文
摘要:不愿忘却。 早知如此绊人心,当初何必相识。 记录了好玩的题目,代码都很好写( [ARC092F] Two Faced Edges tag:tarjan,dfs che 的题解。 tarjan 之后按在不在 scc 上面分讨边,发现要求不含 \((u,v)\) 的路径是否存在。想办法算路径长度 \(>
阅读全文
摘要:记录一下自己如何寄,lsy 不想挂大分的说(( https://www.cnblogs.com/ycx-akioi/p/sb-mistakes.html 负数边权直接贪心假处理了,注意初始值和状态对 0 的取 min。 Floyd 没有写 \(f[i][i]=0\) 导致算错,记得初始化嗷。 stl
阅读全文
摘要:一坑未填又开一坑。 yyc 的讲课速度我不能接受。 做不到两天速通网络流字符串反演fft。 总是听不懂,脑子要炸裂了捏 /wq $A(x)=\sum_{k=0}^{n}A[k]x^k$ 是一个整式。 加法卷积 $C[k]=\sum_{i+j=k}A[i]B[j]$。 其实差不多就是两个 $x$ 进制
阅读全文
摘要:没有写一些概念(?((( 我是梅比乌斯厨=莫比乌斯厨=牲畜(暴论。 ### 前置芝士 #### 积性分解 对于积性函数 $f$,给出 $n=\prod_{i=1}^m p_i^{c_i}$。有 $f(n)=\prod_{i=1}^m f(p_i^{c_i})$。意思是跟 质因子 & 幂次 相关度较高
阅读全文
摘要:学长讲着讲着就听不懂了,妈妈捏。 60 页讲义、 文章省去了大量的证明(? 流 定义 \(f[u\to v]\) 为 \(u\to v\) 的 ⌈ 流量 ⌋, \(c[u\to v]\) 为 \(u\to v\) 的 ⌈ 流量限制 ⌋,\(s\) 为源点,\(t\) 为汇点。 合法流的充要条件 反对
阅读全文
摘要:又叫做 fail 樹。可愛捏((( 用於求解字符串兩個前綴的最大公共 border。 我們先跑一邊 KMP 算法求出 $nxt[]$ 數組。 我們連出每一個邊 $(nxt[i],i)$,嗯嗯為此我們需要新建一個 $0$ 點。 那這個樹有什麼性質捏,顯然一個節點的祖先都是祂的 border。 額大家都
阅读全文
摘要:```cpp const int bs=233, P=998244353; int hsh(string x) { int val=0, mul=1; for(int i=0; i<x.size(); ++i) { if('0'<=x[i]&&x[i]<='9') val=(val+mul*(x[i
阅读全文
摘要:求无向图割点,割边,双连通分量;求有向图强连通分量,缩点。 ### 强联通分量 ```cpp #include #define MN 4000010 #define pb push_back using namespace std; int n, m, vis[MN], stk[MN], top,
阅读全文
摘要:lucas 定理用于求解模数很\(**\)的组合数求解,比如模小素数,会遇到不一定互质即没有逆元的情况。 \[C_{n}^m\equiv C_{n/p}^{m/p}C_{n\bmod p}^{m\bmod p} \]或者说 \((n_i,m_i)\) 是 \((n,m)\) 在 \(p\) 进制上的
阅读全文
摘要:求解高次同余方程。 给定整数 $a,b,p$,其中 $a\bot p$,求一个非负整数 $x$,使得 $a^x\equiv b\pmod{p}$ 因为 $a\bot p$,可以乱搞。 令 $t=sqrt(q)+1$,这里是 c++ 意义上的(雾。 然后搞一波 $x=it-j$,其中 $0\leq j
阅读全文
摘要:求矩形面积并,把矩阵竖着割开,累加。 矩形 $(x_1,y_1,x_2,y_2)$ 分成 $(x1,y1,y2,1)$ 和 $(x2,y1,y2,-1)$ 两条线,指的是,$x=x_i(y_1\leq x\leq y_2)$ 这样的线,土 $1$ 指的是加上或减去。 需要离散 flower,主要是
阅读全文
摘要:其实就是套娃。 一块一块维护。 ```cpp int tr[MN]; void add(int x,int y,int v) { for(int i=x; i<=n; i+=i&-i) for(int j=y; j<=m; j+=j&-j) tr[i][j]+=v; } int ask(int x,
阅读全文
摘要:费马小定理 $p$ 为素数且 $a\bot p$,有 $a^{p-1}\equiv 1(\mod p)$ 二次探测定理 $p$ 为素数且 $a^2\equiv1(\mod p)$,那么 $a\equiv\pm1(\mod p)$ 素数 $p$ 为素数,那么 $p=2$ 或者 $2\nmid p$ 把
阅读全文
摘要:### 定义 俩矩阵 $A,B$,一个 $m*n$,一个 $n*u$ $C=A*B$ 计算公式为 $$ c[i][j]=\sum^{n-1}_{k=0}{a[i][k]*b[k][j]} $$ + 如果行数和列数相同的矩阵,可以称为方阵 + 如果方阵的对角线元素是 $1$,其余元素都是 $0$,那么
阅读全文
摘要:对于一个字符串 $S$, 可以随意把祂头部的放到尾部,这样弄出来最小的字符串 $\min\{S'\}$ 就是 $S$ 的最小表示( 通过这种方法,我们可以快速搞同构串 qwq 我们先 断环成链,那么就变成了找长度为 $n=|S|$ 的最小子串 我们用 $x$ 对应 $S[x],...,S[x+n-1
阅读全文
摘要:我们要查询 $A$ 是不是 $B$ 的子串 设 $g_i=\max\{j\}$,其中 $j0&&a[j+1]!=a[i]) j=g[j]; j+=(a[j+1]==a[i]), g[i]=j; } for(int i=1, j=0; i0&&(j==n||a[j+1]!=b[i])) j=g[j];
阅读全文
摘要:我视界里最不珂爱的 SGT 代码我是真的自己写不动 所以这个是照着校 O勾 填空题目写的符合自己习惯的代码 我们要动态维护平面里的直线和诸如 $x=t$ 这类直线的信息 大概原理不难理解 就是权值线段树对应区间维护的是当前区间的最优解 最优解指的是在这个区间里面最上面的线段 可以完全碾压别的线段那一
阅读全文
摘要:~~详细介绍看心情可能会补~~ ~~放这就是想方便参考顺便水篇博客~~ 我们要维护一个数组的信息,但是我们也要查询历史信息 大概思想是不同线段树相同的部分共用点 每次修改都复制原来点再进行修改,这样肯定不冲突 通过记录不同版本根节点编号来做索引 其实写起来跟普通线段树的区别就是修改的时候需要重新建点
阅读全文
摘要:### 前置芝士 单调队列优化 DP ⌈ 写不动数据结构呜呜呜,先来补这个 ⌋ 对于一个 DP,我们想优化祂的 ⌈ 转移 ⌋ 有些题目的可选状态有以下特征 + 需要寻找最值 + 可选状态区间平移 + 存在可以永久去除的多余状态 感性的讲,可行性是一个滑动窗口,状态两两之间都可以 ⌈ 直接比较出优劣
阅读全文
摘要:很萌很可爱!就是把纸质笔记上 letex 写在这里有亿点慢 ### 线性筛 埃氏筛, $O(n\log\log n)$ ,思路是 ⌈ 标记所有质数的倍数 ⌋ 这样每个合数可能会被标记好几次,我们改进一下,让每个合数只有一种被标记的方式,即 ⌈ 最小质因子 * 常数 ⌋ 具体而言,⌈ 枚举 $2\to
阅读全文
摘要:引入 维护一棵树,支持两种操作 改变边权 | 边权 询问路径中最大权(或其他) BF 的期望是 \(O(\log n)\),但是容易退化成 \(O(n)\),所以引入树链刨分,这里用轻重链刨分 轻重链刨分 记 \(SIZE_i\) 表示以 \(i\) 为根的子树的节点个数,那么对于 \(x\) 为的
阅读全文
摘要:### BST $v_i$ 表示点权,$x$ 表示当前点,$L$ 表示左子树,$R$ 表示右子树 在普通二叉树的基础上多一个条件 对于 $p\in L$,满足 $v_p\leq v_x$ 对于 $q\in R$,满足 $v_x using namespace std; struct node { i
阅读全文
摘要:前置知识:lowbit运算 \(lowbit(x)\) 表示正整数 \(x\) 在二进制表示下最低位的 \(1\) 跟后面的 \(0\) 构成的数值 ,有 \(lowbit(x)=x\) & $ ($ ~\(~x+1)\) ,即 \(lowbit(x)=x\) & \(-x\),理由如下: \(lo
阅读全文
摘要:### 定义 对于两个点,LCA是它们的祖先(或自己)中距离他们最近的点 ### 不妙做法 查询 $O(n)$ #### 向上标记 Rt. 一个节点不断往父节点跑,标记节点 另一个节点也是往上跑碰到标记过的就是LCA #### 向上调整 Rt. 深度深的节点往上调,调到深度一样 如果调成一样了第一个
阅读全文
摘要:给定一张 $n$ 个点、$m$ 条边的有向图,求 $1$ 号点到每个点的最短路径长度。 我们用 $dis_{i}$ 表示从点 $1$ 到点 $i$ 的最短距离。 + 初始化 $dis_{1}$ 为 $0$,其余为无穷大,搞一个队列并将起点入队 + 取队头 $x$,遍历它的出边 $x$ 至 $y_i$
阅读全文
摘要:### 随机数 ``` #include #include srand((unsigned)time(NULL)); ``` 之后可调用```rand()```函数,生产 $0$ ~ $32767$ 的整数 ### 对拍 写三个程序,正解,暴力和数据生成 整出来三个 exe 文件 建一个 bat 文
阅读全文
摘要:#### 定义 若在$\mod p$ 意义下,对于一个整数 $a$ ,有 $a*x\equiv 1(\mod p)$,那么这个整数 $x$ 即为 $a$ 的乘法逆元,同时 $a$ 也为 $x$ 的乘法逆元。 #### 充要条件 $a$ 存在模 $p$ 的乘法逆元的充要条件是 $\gcd(a,p)=1
阅读全文
摘要:## 最长公共子序列 ### 题目描述 给定长度为 $n$ 的数组 $a$,长度为 $m$ 的数组 $b$,求其最长公共子序列长度 ### DP $f[i][j]$ 表示 $a$ 前 $i$ 项和 $b$ 前 $j$ 项的最长公共子序列长度 因为如果我们要在序列尾巴上加元素是不跟前面选了什么有关系的
阅读全文
摘要:## 最长上升子序列 ### 题目描述 给定一个长度为 $n$ 的数列 $a$,求其最长上升子序列长度 ### DP $O(n^2)$ $f[i]$ 表示以 $i$ 结尾的最长上升子序列 显然有 $f[i]=max(f[i],f[j]+1)$ 其中 $1\leq i \leq n,1\leq j\l
阅读全文
摘要:给定一张 $n$ 个点、$m$ 条边的有向图,求 $1$ 号点到每个点的最短路径长度。 我们用 $dis_{i}$ 表示从点 $1$ 到点 $i$ 的最短距离。 + 初始化 $dis_{1}$ 为 $0$,其余为无穷大 + 找出点 $i$ ,满足 $dis_{i}$ 是未标记节点中 $dis$ 值最
阅读全文
摘要:设 $f[i][j]$ 表示从第 $i$ 位开始 $2^j$ 的最值 很明显,有 $f[i][0]=a_i$ 还有 $f[i][j]=\max\{f[i][j-1],f[i+2^{j-1}][j-1]\}$ ### 预处理 ``` void prevwork() { for(int i=1; i<=
阅读全文
摘要:### 01背包 给定 $n$ 件物品,每个物品有重量 $w_{i}$ 和价值 $c_{i}$,一个物品只有一件,求容量不超过 $m$ 的背包最多可以装多少价值物品 定义 $f_{i,j}$ 表示前 $i$ 件物品在容量不超过 $j$ 的背包下可以获得的最大价值则有 $f_{i,j}=\max\{f
阅读全文
摘要:动态维护中位数 开一个大根堆一个小根堆,一个用于维护较小的一半的最大值,一个用于维护较大一半的最小值,每次输入之后通过调整堆保证两半区分,时间复杂度为 $O(\log n)$ 具体而言,有如下步骤: + 建立一个大根堆 $lt$,一个小根堆 $rt$ ,中位数 $mid$ + 对于一个新数 $x$,
阅读全文