CCF CSP题库训练
文章平均质量分 74
Da_秀
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
P3953 [NOIP 2017 提高组] 逛公园
本文介绍了NOIP2017提高组题目"逛公园"的解题方法。题目要求在有向图中统计从入口到出口、路径长度不超过最短路d+K的路径数量,若存在无限多解则输出-1。 核心算法: 使用Dijkstra算法计算各点到终点的最短距离 构建反向图进行记忆化搜索 通过状态标记检测0权环(可能导致无限路径) 动态规划统计合法路径数 关键点: 记忆化数组dp[u][k]记录从u出发剩余k步额外时间的路径数 检测访问状态vis2防止无限递归 反向图遍历优化搜索过程 复杂度:O((N+M)logN + NK)(原创 2025-07-13 11:13:39 · 511 阅读 · 0 评论 -
C++ string的使用
《C++ std::string 字符串操作指南》摘要: std::string 是 C++标准库提供的安全字符串类,功能丰富且易用。主要特性包括:1)多种初始化方式(空字符串、字面值、重复字符等);2)便捷的访问方法(下标[]、at()边界检查、front/back);3)字符串修改操作(拼接、插入、删除、替换);4)子串处理(提取、查找、检查包含);5)输入输出支持(cin读取、getline整行输入);6)比较、大小调整等实用功能。文章详细展示了各类操作代码示例,并强调其自动内存管理优势,避免C风格字原创 2025-07-13 11:11:13 · 687 阅读 · 0 评论 -
P2074 危险区域
题目分析本题要求在给定的城市网格中,计算在k个可能的炸弹安放位置中,选择一个位置放置炸弹后,受威胁街区(距离炸弹不超过t的街区)的最大数量。炸弹的威力t表示所有到炸弹位置的欧几里得距离小于等于t的街区都会受威胁。解题思路 问题理解:对于每个可能的炸弹位置,需要计算以该位置为中心、半径为t的圆内(包括边界)包含的网格点数。最终输出所有炸弹位置中最大威胁区域对应的街区数。 关键点:由于网格范围大(n, m最大10^5),而t较小(最大300),直接枚举整个网格会超时。因此采用逐行计算的原创 2025-07-02 09:51:03 · 897 阅读 · 0 评论 -
P1048 [NOIP 2005 普及组] 采药
摘要:题目要求在规定时间T内采摘M株草药,每株草药有采摘时间和价值,目标是最大化总价值。这是一个典型的0-1背包问题,可通过动态规划解决。定义二维数组dp[i][j]表示前i株草药在时间j内的最大价值。状态转移考虑是否选择当前草药:不选则继承前状态,选则需时间足够并更新价值。样例中,输入T=70、3株草药(时间/价值:71/100、69/1、1/2),最终最大价值为3。程序采用二维DP实现,时间复杂度O(M×T),空间复杂度O(10^5)。原创 2025-06-29 09:45:45 · 944 阅读 · 0 评论 -
匈牙利算法(二分图最大匹配)
匈牙利算法是一种求解二分图最大匹配问题的高效算法。其核心思想是通过DFS遍历二分图的节点,为每个未匹配节点寻找可匹配对象。算法采用贪心策略和递归回溯机制,在遍历过程中遇到已匹配对象时,会递归询问原配对象能否更换匹配,从而实现最大匹配。主要步骤包括:初始化匹配状态、遍历节点进行DFS匹配、使用访问标记防止重复访问。算法时间复杂度为O(n×m),其中n为节点数,m为边数。该算法形象地描述了"舞伴交换"的过程,通过递归让位机制实现了全局最优匹配。其实现简洁高效,适用于各类二分图匹配问题。原创 2025-06-14 09:37:31 · 501 阅读 · 0 评论 -
最小费用最大流算法
最小费用最大流算法通过SPFA寻找费用最短增广路,使用链式前向星存储正向边和反向边。每次沿最便宜路径增广流量,更新边容量和反向边,最终获得最大流量和最小费用。该算法的核心在于反向边的"反悔"机制和贪心选择策略。时间复杂度主要取决于SPFA的执行次数,适用于解决带费用约束的网络流优化问题。原创 2025-06-14 09:35:25 · 856 阅读 · 0 评论 -
P1629 邮递员送信
题目描述邮递员需要从节点1出发,将物品送到节点2至n后每次返回,求总最短时间。解题需构建原图和反图,分别用Dijkstra算法计算节点1到各节点的最短距离(去程)和各节点到1的最短距离(回程),最后将所有往返距离求和。样例分析验证了算法的正确性,总时间为83。该解法高效可靠,适用于大规模数据。原创 2025-06-11 17:01:41 · 889 阅读 · 0 评论 -
Dijkstra算法代码模板(C++)
本文提供了Dijkstra算法的C++实现模板,适用于带非负权重的图。该模板使用优先队列优化,时间复杂度为O(E log V)。核心实现包括邻接表存储图结构、距离数组初始化、优先队列维护最短路径。模板支持1-indexed节点编号,自动处理重边和不可达节点(距离为INF)。文章还说明了关键组件、使用注意事项(如非负权重要求)以及定制化修改方案(如路径记录、多源最短路径等)。示例代码展示了从节点1出发计算各点最短距离的用法,可作为图论问题的通用解决方案。原创 2025-06-11 17:00:14 · 657 阅读 · 0 评论 -
P2015 二叉苹果树
# P2015 二叉苹果树## 题目描述有一棵苹果树,如果树枝有分叉,一定是分二叉(就是说没有只有一个儿子的结点)这棵树共有 $N$ 个结点(叶子点或者树枝分叉点),编号为 $1 \sim N$,树根编号一定是 $1$。我们用一根树枝两端连接的结点的编号来描述一根树枝的位置。下面是一颗有 $4$ 个树枝的树:```2 5 \ / 3 4 \ / 1```现在这颗树枝条太多了,需要剪枝。但是一些树枝上长有苹果。给定需要保留的树枝数量,求出最多能留住原创 2025-06-07 09:41:11 · 420 阅读 · 0 评论 -
分组背包问题Python和C++两个版本讲解
分组背包问题是一种特殊背包问题,其特点是物品被分为若干组,每组只能选一件物品。本文详细讲解了分组背包问题及其动态规划解法。 摘要要点: 问题特点:物品分组,组内物品互斥,每组最多选一件 动态规划解法核心: 使用一维DP数组,dp[j]表示容量j的最大价值 三重循环结构:按组处理、逆序容量、遍历组内物品 关键点在于逆序遍历容量,确保组内物品不重复选择 提供了C++实现代码示例 时间复杂度为O(G×V×K),其中G为组数,V为容量,K为组内最大物品数 与01背包、完全背包的区别在于分组处理和选择限制 该解法通过原创 2025-06-07 09:38:09 · 1417 阅读 · 0 评论 -
P2015 二叉苹果树
题目描述有一棵苹果树,如果树枝有分叉,一定是分二叉(就是说没有只有一个儿子的结点)这棵树共有 N 个结点(叶子点或者树枝分叉点),编号为 1∼N,树根编号一定是 1。我们用一根树枝两端连接的结点的编号来描述一根树枝的位置。下面是一颗有 4 个树枝的树:2 5 \ / 3 4 \ / 1现在这颗树枝条太多了,需要剪枝。但是一些树枝上长有苹果。给定需要保留的树枝数量,求出最多能留住多少苹果。原创 2025-06-07 08:46:27 · 901 阅读 · 0 评论 -
P1219 [USACO1.5] 八皇后 Checker Challenge
八皇后问题是一个经典的回溯算法题,要求在n×n棋盘上放置n个互不攻击的皇后。解题要点是使用DFS逐行放置皇后,并通过标记列和对角线避免冲突。程序输出前三个解(按字典序)和解的总数。样例输入6时输出4种解,其中前三个为2 4 6 1 3 5、3 6 2 5 1 4和4 1 5 2 6 3。算法通过回溯和剪枝高效搜索,时间复杂度为O(n!),适用于n≤13的数据范围。原创 2025-06-02 10:02:07 · 889 阅读 · 0 评论 -
P1605 迷宫
迷宫路径计数问题摘要 本文解决了一个经典的迷宫路径计数问题,采用深度优先搜索(DFS)算法遍历所有可能的路径。题目要求从起点到终点的路径方案数,其中包含障碍物且每个方格最多访问一次。 关键点: 使用方向数组处理上下左右移动 标记已访问位置防止重复 遇到终点时立即计数并返回 递归后及时回溯,撤销访问标记 解决方案通过DFS正确统计了所有可行路径,时间复杂度与迷宫大小和障碍物位置相关,适用于题目给定的小规模迷宫(N,M ≤5)。代码简洁高效,正确处理了各种边界情况,包括起点即为终点的情况。原创 2025-06-02 10:00:26 · 1153 阅读 · 0 评论 -
CSP-J普及组第一轮真题单选题专项训练(二)
9、一棵有 n个结点的完全二叉树用数组进行存储与表示,已知根结点存储在数组的第1 个位置。若存储在数组第 9个位置的结点存在兄弟结点和两个子结点,则它的兄弟结点和右子结点的位置分别是()8、考虑由 N 个顶点构成的有向连通图,采用邻接矩阵的数据结构表示时,该矩阵中至少存在()个非零元素。A、A 数组的平均 B、A 数组的最小值 C、A 数组的中值 D、A 数组的最大值。14、设A是n个实数的数组,考虑下面的递归算法:请问算法 XYZ 的输出是什么。A、n2次方 B、n-2 C、n-1 D、n。原创 2025-05-13 18:29:15 · 899 阅读 · 0 评论 -
CSP-J普及组第一轮考试阅读程写结果专项训练(二)
文章摘要:本文提供了两道CSP-J普及组第一轮考试的阅读程序写结果专项训练题。程序1涉及异或操作,输入特定数据后输出结果;程序2则模拟了过河卒问题,计算从起点到终点的路径数。通过这两道题目,考生可以练习阅读和理解程序代码,并掌握相关算法和逻辑思维。第一道题的输出结果为“5 6 7 0”和“0 0 0 1”,第二道题的输出结果为“6”。原创 2025-05-13 18:29:44 · 343 阅读 · 0 评论 -
CSP-J普及组第一轮考试阅读程写结果专项训练(一)
2.P1469 找筷子。原创 2025-05-12 23:26:44 · 363 阅读 · 0 评论 -
CSP-J普及组第一轮真题单选题专项训练(一)
15、一棵二叉树如下图所示,若采用顺序存储结构,即用一维数组元素存储该二叉树中的结点(根结点的下标为 1,若某结点的下标为 i,则其左孩子位于下标2i 处、右孩子位于下标 2i+1 处),则该数组的最大下标至少为()。5、若有如下程序段,其中 s、a、b、c 均已定义为整型变量,且 a、c 均已赋值(c 大于 0)4、有 6个元素,按照 6、5、4、3、2、1 的顺序进入栈 S,请问下列哪个出栈序列是非法的。7、对于入栈顺序为 a,b,c,d,e的序列,下列()不是合法的出栈序列。每题有且有一个正确选项)原创 2025-05-12 23:25:57 · 621 阅读 · 0 评论 -
CSP-J普及组阅读程序写结果的专项训练(三)
文章摘要: 本文展示了五个C++程序的代码示例及其对应的输入输出结果,涵盖了NOIP和USACO等编程竞赛中的常见问题。程序1统计给定范围内数字2的出现次数;程序2通过字符处理判断两个字符串的乘积模47是否相等;程序3实现了数字反转功能;程序4计算低洼地的数量;程序5根据输入的压缩数据生成二进制矩阵。每个程序都提供了具体的输入和输出示例,帮助理解其功能和应用场景。这些程序涉及基础算法、字符串处理和数学运算,适合编程初学者学习和参考。原创 2025-05-11 09:01:23 · 454 阅读 · 0 评论 -
CSP-J普及组阅读程序写结果的专项训练(一)
1.B3925 [GESP202312 三级] 小猫分鱼。2.B3786 [信息与未来 2023] 幸运数字。3.B3787 [信息与未来 2023] 精密计时。4.B3750 [信息与未来 2019] 幸运素数。5.B2117 整理药名。原创 2025-05-10 09:28:42 · 716 阅读 · 0 评论 -
GESP/CSP 选手必刷C++ 基础算法题(一)
我们设1单位的草量为1头牛,那么15头牛吃20天的草量为300单位(其中包含20天内的新生草量),在计算20头牛吃10的草量为200个单位(其中包含10天内的新生草量),两者的差为10天内的新生草量。有一个牧场,牧场上的牧草每天都在匀速生长,这片牧场可供15头牛吃20天或可供20头牛吃10天,那么牧场每天新生的草量可供几头牛吃1天。数学中经典的“鸡兔同笼”问题,已知头共30个,脚共90只,问笼中的鸡和兔各有多少只?分析:梯形的面积=(上 + 下)x 高 / 2。设鸡为j只,兔为t只,头为h,脚为f,那么。原创 2025-05-05 09:47:27 · 475 阅读 · 0 评论
分享