luogu4591 碱基序列 题解分析 设 \(f_{i,j}\) 为使用了 \(i\) 个串,匹配到了 \(S\) 的前 \(j\) 位的方案数。 \[ f_{i,j} = \sum_{S[i-m,i] = S_0} f_{i-1,i-m} \] 其中 \(S_0\) 表示一个匹配串,\(S[i-m,i]\) 是这个长度为 \(m\) 的匹配串的长度。 可以用 KMP 算法快速求出匹配串 \(S_0\) 在 \(S\ 2022-08-12 题解 #DP #KMP算法
矩阵乘法简单题 1以下是简单矩阵乘法题目大赏。 注意我这时候的矩阵乘法还没有形成固定的码风,所以代码看起来差异较大且比较别扭,见谅。 luogu5343 分块 分析 分的块长必须同时满足二人的要求,所以必然是二者的交集。 设 \(f_i\) 为长度为 \(i\) 序列的分块方案数,有 \(f_0 = 1\)。 \[ f_i = \sum_{j=1}^m f_{i-a_j} \] 其中 \(a_i\) 2022-08-11 题解 #DP #矩阵
luogu4774 屠龙勇士 题解分析 首先预处理出杀死每条龙时要使用哪一把剑,设杀死第 \(i\) 条龙用的剑的攻击力为 \(atk_i\)。 那么问题转化为求解 \[ \left\{ \begin{array}{l} atk_1 \cdot x &\equiv a_1 \pmod{p_1} \\ atk_2 \cdot x &\equiv a_2 \pmod{p_2} \\ &\vdo 2022-08-09 题解 #数论 #扩展中国剩余定理
字符串简单题目 1luogu4391 无线传输 分析 题目说的很别扭,实际上是求一个最短的 \(S\) 的子串,满足这个子串自我拼接之后,\(S\) 是这个拼接串的子串。也就是 \(S\) 的最小周期。 若 \(|S|=n\),则答案为 \(n-next_n\)。证明如下: 如下图表示 \(S\) 的最大 Border 相交的情况,黑色部分是字符串 \(S\),蓝色部分是和红色部分是 \(next_n\) 2022-08-09 题解 #Trie #字符串 #KMP算法 #失配树
「字符串学习笔记」#1 KMP算法、Trie和自动机概念基础概念 定义 \(S\) 为一个字符串,其长度为 \(n=|S|\),不特殊说明的情况下,下标从 \(1\) 开始,\(S_i\) 为 \(S\) 中从左往右第 \(i\) 个字符。 \(S[l,r]\) 为 \(S_l,S_{l+1} , \ldots S_{r}\),称为 \(S\) 的一个子串。\(S[1,i]\) 称为 \(S\) 的一个前缀 (prefix),\(S[i,n]\ 2022-08-08 学习笔记 #Trie #字符串 #KMP算法
「Codeforces Round」#812 (Div 2)CF1713. A. Traveling Salesman Problem 注意到答案为 \(2 \cdot (Rx-Lx+Ry-Ly)\),其中 \(Rx\) 为最大的横坐标,\(Lx\) 为最小的横坐标,\(Ry\) 与 \(Ly\) 同理。 #include<bits/stdc++.h> using namespace std; #define int long l 2022-08-08 题解 #构造 #Codeforces #贪心 #交互题
「AtCoder Beginner Contest」#263ABC263. A. Full House #include<bits/stdc++.h> using namespace std; #define int long long int h[15]; int read() { int a=0, f=1; char c=getchar(); while(!isdigit(c)) { if(c==' 2022-08-07 题解 #DP #贪心 #网络流 #AtCoder #数学期望 #分治 #最大流
「Edu Codeforces Round」#133 (Div 2)CF1716. A. 2-3 Moves 分析 注意到 \(n=1\) 的时候要使用 \(+3\),\(-2\) 两次操作。 如果 \(3 \mid n\),那么全部用 \(3\) 就好,操作数 \(\frac{n}{3}\)。 否则当 \(n \equiv 2 \pmod 3\) 时,先用一次 \(2\) 然后全部用 \(3\) 即可,操作数 \(\lfloor \frac{n}{3 2022-08-05 题解 #构造 #DP #Codeforces #贪心
「杂题选讲」#2菜死了啊。 都是些比较简单的题目,可惜我做不出来 ABC261D Flipping and Bonus 分析 称正面朝上为获胜,反面朝上为失败。 一开始认为,输掉一局相当于把计数器置 \(0\),所以应该加入状态,设 \(f(i,j)\) 为前 \(i\) 局,输掉 \(j\) 局,所能得到的最大收益。这个状态最大的问题是信息缺失。你怎么知道你赢下第 \(i\) 局是几连胜?无法转移 2022-08-04 题解 #DP #贪心 #概率论 #组合数学 #杂题选讲