随笔分类 - 题解
2024牛客暑期多校训练营9 B.Break Sequence
摘要:设 \(f_i\) 表示最后一个区间以 \(a_i\) 结尾的方案总数,也即前 \(i\) 个数的方案总数。最后的答案是 \(f_n\)。 很容易得到转移方程: \[f_i = \sum_{j=1}^{i-1}f_j \]其中,需要保证 \(a_i \sim a_j\) 是一个合法区间才能累加,这个
AtCoder Snuke21 J. Drink Bar - 分段得分题解
摘要:这里将每一个三元组 \((a_i,b_i,c_i)\) 称为一组数。 Subtask 1 暴力枚举所有的非空子集即可。 枚举方式可以采用类似状压 DP 的二进制枚举或者直接 DFS。 时间复杂度 \(O(N \times 2^N)\)。 Subtask 2 性质:此时的特征值最多由两个有效组组成,原
2024牛客暑假多校训练营3 - A. Bridging the Gap 2
摘要:思路全在注释里了: #include<cstdio> #include<cmath> #include<algorithm> using namespace std; const int N=5e5+5; int n,l,r,a[N]; bool Solve() { //打工次数:一个人能将其他人运
2024牛客暑期多校训练营2 - I. Red Playing Cards
摘要:思路与官方题解一样,不过我采用了递归的写法,这样就可以避免排序等操作。 另外还要注意递归的时候不能让多个不同的递归函数同时修改一个数组,否则这个数组同时被多个函数使用,会很混乱。我这里把它开成了二维来避免这个问题。 代码如下: #include<cstdio> #include<algorithm>
2024牛客多校暑期训练营2 - C. Red Walking on Grid
摘要:题目大意: \(2 \times n\) 大小的方格矩阵,某些格子不能走,走过的格子不能走。从任意点出发,一次最多走多少次? 首先有一个贪心的思想,每次从最左走到最右,只能向上下右走,不能向左走(因为向左走一定不会让步数更多)。 动态规划,设 \(f_{i,j}\) 表示从每个连通块走到 \((i,
2024牛客暑期多校训练营1 - I. Mirror Maze
摘要:题目大意:一个由四种镜面(| - / \)组成的矩阵,根据镜面的方向反射光线。问坐标 \((x,y)\) 处向某方向射入一束光线后(此光线会直接穿过此位置 \((x,y)\) 的镜面),一共会反射(直接穿过的不算)到多少个不同(一个坐标算一个镜面)的镜面。 总体思路为预处理出每一个坐标向每一个位置发
题解:洛谷 P10878 [JRKSJ R9] 在相思树下 III
摘要:原题链接 解析 在操作一时,最小值如果在最后一位,其无法更新任何数,会被删除;否则不在最后一位时一定会被其右侧更大的数更新。所以在操作一时,最小值一定会被更新掉。 同理,在操作二时,最大值一定会被更新掉。 由此,操作一决定了答案的下限,操作二决定了答案的上限。 所以可以得出贪心策略:先进行 \(m\
题解:洛谷 P10497 [USACO03Open] Lost Cows
摘要:原题链接 思路 + 算法 首先,考虑读入到 \(a_i\) 时,如果要得到此时的最优解(指所有牛的编号不重不漏地覆盖 \([1,i]\) 的所有编号),对于第 \(i\) 头奶牛,因为在它前面有 \(a_i\) 头奶牛的编号小于它,所以第 \(i\) 头奶牛的编号应当为 \(a_i+1\)。 如果有
题解:洛谷 P10996 【MX-J3-T3】Tuple
摘要:原题链接 介绍一种(也许是正解的)卡常做法 先说总体思路:对于每个三元组 \((x,y,z)\),若有一个 \(w\) 满足 \((x,y,w),(x,z,w),(y,z,w)\) 均存在,则找到了一个合法的四元组 \((x,y,z,w)\)。 \(20\ \rm{Pts}\) 做法 如果暴力搜索,
AcWing 1078. 旅游规划 (DFS找树的直径+直径中点性质求解,无DP)
摘要:原题链接 题目描述 算法 引用自 树的直径 - OI-Wiki: 若树上所有边边权均为正,则树的所有直径中点重合 证明:使用反证法。设两条中点不重合的直径分别为 \(\delta(s,t) 与 \delta(s',t')\),中点分别为 \(x\) 与 \(x'\)。显然,\(\delta(s,x)
(CF 10D)最长公共上升子序列(LCIS)(要求输出序列) - 题解
摘要:最长公共上升子序列(LCIS) 原题链接:CodeForces、洛谷 时间限制:C/C++ 1000MS,其他语言 2000MS 内存限制:C/C++ 256MB,其他语言 512MB 描述 给定两个整数序列,写一个程序求它们的最长上升公共子序列。 当以下条件满足的时候,我们将长度 \(N\) 的序
逆序对数列(P2513) - 题解
摘要:[HAOI2009] 逆序对数列 原题链接 题目描述 对于一个数列 \(\{a_i\}\),如果有 \(i<j\) 且 \(a_i>a_j\),那么我们称 \(a_i\) 与 \(a_j\) 为一对逆序对数。若对于任意一个由 \(1 \sim n\) 自然数组成的数列,可以很容易求出有多少个逆序对数
优秀的树 - 题解(数学)
摘要:优秀的树 时间限制:C/C++ 2000MS,其他语言 4000MS 内存限制:C/C++ 256MB,其他语言 512MB 描述 给定一棵树,其所有边权重均为 \(1\),定义 \(f(u)=Σ_v dis(u,v)\),v 表示树上的所有结点,\(dis(u,v)\) 表示结点 \(u\) 和
树(tree) - 题解(带权并查集)
摘要:树(tree) 时间限制:C/C++ 2000MS,其他语言 4000MS 内存限制:C/C++ 256MB,其他语言 512MB 描述 给定一个 \(n\) 个结点,\(n−1\) 条边的有根树。 第 \(i\) 条边可以用 (\(a_i,b_i\)) 来描述,它表示连接结点 \(a_i\) 和结
费解的开关 - 题解
摘要:费解的开关 时间限制:C/C++ 1000MS,其他语言 2000MS 内存限制:C/C++ 256MB,其他语言 512MB 描述 你玩过“拉灯”游戏吗? \(25\) 盏灯排成一个 \(5×5\) 的方形。 每一个灯都有一个开关,游戏者可以改变它的状态。每一步,游戏者可以改变某一个灯的状态。 游
昆虫繁殖 - 题解
摘要:昆虫繁殖 时间限制:C/C++ 1000MS,其他语言 2000MS 内存限制:C/C++ 256MB,其他语言 512MB 描述 科学家在热带森林中发现了一种特殊的昆虫,这种昆虫的繁殖能力很强。每对成虫过 \(x\) 个月产 \(y\) 对卵,每对卵要过两个月长成成虫。假设每个成虫不死,第一个月只
奇怪的汉诺塔 - 题解
摘要:奇怪的汉诺塔 时间限制:C/C++ 1000MS,其他语言 2000MS 内存限制:C/C++ 256MB,其他语言 512MB 描述 汉诺塔问题,条件如下: 这里有 \(A\)、\(B\)、\(C\) 和 \(D\) 四座塔。 这里有 \(n\) 个圆盘,\(n\) 的数量是恒定的。 每个圆盘的尺
【入门】统计每个月兔子的总数 - 题解
摘要:【入门】统计每个月兔子的总数 时间限制:C/C++ 1000MS,其他语言 2000MS 内存限制:C/C++ 16MB,其他语言 32MB 描述 有一对兔子,从出生后第3个月起每个月都生一对兔子,一对小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第 \(n\) 个月(\(n<=50\)
放苹果 - 题解
摘要:放苹果 时间限制:C/C++ 1000MS,其他语言 2000MS 内存限制:C/C++ 256MB,其他语言 512MB 描述 把 \(M\) 个同样的苹果放在 \(N\) 个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)\(5,1,1\) 和 \(1,5,1\) 是同一