模板 - 普及/提高−难度模板 普及/提高−B3611 【模板】传递闭包判断一个点是否能到达另一个点。 因为 $n\leq100$,故用 Floyed 直接是否计算路径。 123456789101112131415161718192021222324252627282930313233343536373839404142#include<bits/stdc++.h>using namespace std;c 2024-08-29 模板
模板 - 普及-难度模板 普及-P3383 【模板】线性筛素数给定一个范围 $n$,有 $q$ 个询问,每次输出第 $k$ 小的素数。 1234567891011121314151617181920212223242526272829#include<bits/stdc++.h>using namespace std;const int N = 1e8 + 7;int n, q;bool prime[N];in 2024-08-29 模板
题解 - CF2002D DFS Checker Luogu (Easy Version) | Luogu (Hard Version) 题意给定一个根树和一系列查询,每次查询包括交换树的 dfs 序列中的两个元素,然后判断交换后的序列是否仍然是一个有效的 dfs 序列。 思路先进行一遍 dfs,记录每个节点的访问顺序和子树大小。 判断DFS序列,对于每个查询,通过比较交换前后的时间戳和子树大小来判断是否仍然是有效的DFS序列。 为了提高效率,使 2024-08-28 题解 > CF #dfs
题解 - CF2002E Cosmic Rays Luogu 题意给定一个由对数对描述的数组,每个数对 $(a_i, b_i)$ 表示 $a_i$ 个 $b_i$ 连续排列。每秒钟,所有索引为奇数或与前一个元素不同的元素会被删除。我们的目标是计算在数组变为空之前需要的秒数。 思路考虑 dp。 处理每个数对,对于每个数对将其作为一个新的状态插入到队列中。在插入之前,需要检查队列的尾部元素是否与新状态冲突。冲突有两种情况: 如果尾部元素的连续数 2024-08-28 题解 > CF #dp
题解 - CF2002H Counting 101 Luogu 题意给定 $n$ 和 $m$。有一个 $k$,取值范围在 $[0,\left\lfloor\frac{n-1}{2}\right\rfloor]$。现在有个序列,其中每个元素的取值范围为 $[1, m]$。需要对这个序列进行任意多次操作,在每次操作中,选择三个连续的元素 $a_i, a_{i+1}, a_{i+2}$ 并将它们合并为一个元素 $ \max(a_i+1, a_{i+1 2024-08-26 题解 > CF #dp
学习笔记 - Dijkstra Dijkstra 算法是一种用于寻找图中两点之间最短路径的算法。它由荷兰计算机科学家艾兹赫尔·戴克斯特拉(Edsger W. Dijkstra)在1956年提出,并于1959年发表。 算法原理Dijkstra算法适用于带权重的图,包括有向图和无向图。算法的核心思想是贪心法:每次找到距离起点最近的一个未被访问的顶点,然后考察所有由这个顶点引出的边,通过这个顶点更新起点到其他所有顶点的距离。 算法步骤 2024-04-03 学习笔记 > 图论 #算法 #图论 #最短路
题解 - CF1950C Clock Conversion Luogu 本题是一个简单的时间转换程序,将给定的二十四小时制时间转换为十二小时制时间。 模拟即可,读取字符串后,提出小时和分钟部分,下标为 $0$ 和 $1$ 的数字组成小时部分,$3$ 和 $4$ 组成分钟部分。 按照题意,根据小时部分和分钟部分,如果小时部分小于 $12$,则时间为 AM,如果小时部分等于 $0$,则小时部分改为 $12$,小时部分大于 $12$,时间为 PM,小时部分减 $ 2024-04-03 题解 > CF #模拟
题解 - CF1950B Upscaling Luogu 题目要求根据给定的整数 $n$,输出一个 $2n \times 2n$ 的棋盘,其中每个 $2 \times 2 $的小方块交替使用 # 和 . 构成。 模拟即可,用一个 flag 表示当前应该使用 # 还是 .,使用两层循环来生成棋盘,每次循环是,先根据 flag 的值输出当前行的两个方块,然后翻转 flag 的值,以便下一行使用相反的符号。 每输出完一行,根据 $n$ 的奇偶 2024-04-03 题解 > CF #模拟
题解 - P10293 Troublesome Keys Luogu 如果是正常的键,那么在输入的 s1 和 s2 所统计的个数应该是相同的;如果是愚蠢的键,那么愚蠢的键对应的字母就会在 s1 中比在 s2 中多,而它显示错误的字母就会比 s2 少,那么我们就可以快速的找到显示错误的字母,并且知道按下了多少个愚蠢的键;如果是静音键,那么静音键对应的字母在 s1 中比在 s2 中一定要多。 但是我们需要我们要遍历两次,因为按下静音键和按下愚蠢的键的次数是可 2024-04-02 题解 > CCC #模拟
题解 - CF1903C Theofanis' Nightmare Luogu 分析这道题要求将一个数组分成若干个非空的子数组,然后计算每个子数组的和,并用每个子数组的和乘以子数组的长度,最后求和。问题的关键在于找到一种分割方式,使得其值最大。 观察发现,我们需要在数组中找到一个位置,将数组分为两个部分,使得右半部分的和尽可能大。对于这个问题,从数组的末尾开始往前遍历是一个比较自然的想法。我们可以维护一个变量 $res$,表示当前遍历到的位置右侧的子数组的和,同时 2024-03-16 题解 > CF #贪心