logo
publist
写文章

简介

该用户还未填写简介

擅长的技术栈

可提供的服务

暂无可提供的服务

上海计算机学会2026年4月月赛C++乙组T3 轻重缓急(二)

这篇文章介绍了一个贪心算法问题,要求选择最多数量的任务完成,每个任务有最晚启动时间和耗时限制。解题关键在于: 将任务按完成截止时间(D_i + T_i)升序排序,优先处理更紧急的任务; 使用大根堆动态维护已选任务,实时跟踪总耗时; 采用贪心策略:当新任务无法满足启动时间时,替换掉耗时最长的任务以优化总耗时; 算法复杂度为O(n log n),能高效处理大规模数据(n≤300,000)。 该方法通过

#c++#开发语言
上海计算机学会2026年5月月赛C++丙组T4 价格的跨度

这道题目要求计算每天黄金价格的跨度,定义为从当天开始向前回溯,直到遇到第一个严格更高价格的天数差。由于数据量较大(N ≤ 500,000),直接暴力解法会超时。 解法核心:采用单调栈优化。维护一个存储价格的单调递减栈,栈中每个元素对应其原始下标。对于每个新价格,弹出栈顶所有小于等于它的元素,剩余栈顶即为左侧第一个严格更大的价格位置,通过下标差计算跨度。栈底预设极大值哨兵简化边界判断。 时间复杂度:

#c++#开发语言
上海计算机学会2026年5月月赛C++丙组T5 石头剪刀布

摘要 题目要求计算N轮石头剪刀布游戏中,相邻轮次出招不能重复的不同出招序列数。通过分析得出公式:总方案数为$3 \times 2^{N-1}$。由于N可达$10^9$,采用快速幂算法高效计算$2^{N-1}$,并对结果取模$10^9+7$。样例输入3输出12验证了算法的正确性。核心思路是数学推导结合快速幂优化,将时间复杂度从$O(N)$降至$O(\log N)$。

#c++#算法#开发语言
上海计算机学会2026年4月月赛C++丙组T3 螺旋矩阵

本文介绍了一个生成N×N螺旋矩阵的算法。采用方向数组模拟方法,按照右、下、左、上的顺序循环移动,遇到边界或已填充数字时转向。算法使用两个方向数组dx和dy表示四个移动方向,通过循环填充1到N²的数字,并判断下一步是否合法来决定前进或转向。时间复杂度为O(N²),空间复杂度为O(N²),适用于N≤300的情况。核心思想是"合法前进,不合法转向",最终输出完整的螺旋矩阵。

#c++#矩阵#算法
上海计算机学会2026年4月月赛C++乙组T4 平衡二叉树

本文解决平衡二叉树形态计数问题。给定N个节点,求满足平衡条件的二叉树形态数量(模1,000,000,007)。采用动态规划方法,定义dp[i][h]表示i个节点、高度h的平衡树数量。预处理节点数的最小/最大高度以优化效率。状态转移时枚举左右子树节点分配,确保高度差≤1。最终累加所有合法高度的方案数得到结果。算法时间复杂度优化至O(N^2*H^2),适用于N≤5000的数据规模。

#c++#java#数据结构
上海计算机学会2026年4月月赛C++丙组T2 括号消除

题目要求模拟括号消除过程,最终输出剩余字符数。通过计数法高效解决:用变量z记录未匹配的左括号数,cnt记录无法匹配的右括号数。遍历字符串时,遇到左括号增加z,遇到右括号优先匹配左括号(z--),否则增加cnt。最终剩余字符数为z + cnt。该方法时间复杂度O(n),空间O(1),适用于大数据范围。

#c++#java#开发语言
CCF-GESP计算机学会等级考试2026年6月一级C++T1 去旅行

这道题目要求计算从A市到B市的三种旅行方案中最便宜的价格。三种方案分别是:直飞、高铁转飞机和高铁转高铁。程序需要读取四个正整数分别代表各段行程的价格,计算三种方案的总费用,然后输出最小值。 输入输出样例解析: 样例1中,三种方案价格分别为999、804和693,最便宜的是693。 样例2中,三种方案价格分别为9、11和10,最便宜的是9。 解题思路: 读取四个输入值:直飞价格、A到C高铁价格、C到

#c++#算法#开发语言
CCF-GESP计算机学会等级考试2026年6月六级C++T2 满二叉树

摘要 本题要求统计给定有根二叉树中所有子树(以每个节点为根的子树)是满二叉树的数量。满二叉树的定义是所有叶子深度相同且非叶子节点都有两个儿子。通过后序遍历自底向上处理每个节点:判断其左右子树是否均为满二叉树且高度相等,若是则当前子树也是满二叉树。时间复杂度为O(n),空间复杂度为O(n),适合处理n≤10^5的数据范围。示例代码展示了递归实现方法,最终输出满足条件的子树数量。

#c++#深度优先#算法
CCF-GESP计算机学会等级考试2026年6月六级C++T1 条形蛋糕

这道题目要求将长度为n的长条蛋糕分割为若干整数长度的块,使得总销售价格最大。这是一个典型的完全背包问题,其中蛋糕块长度作为物品,价格作为价值,每种长度可以无限使用。 解法采用动态规划,状态dp[j]表示长度为j时的最大价值。初始化dp[0]=0,然后对于每个长度i(1到n),正序遍历容量j(i到n),状态转移方程为dp[j] = max(dp[j], dp[j-i] + p[i])。最终dp[n]

#c++#java#开发语言
CCF-GESP计算机学会等级考试2026年3月四级C++T1 山之谷

题目要求统计网格中满足"山谷"条件的单元格数量。山谷定义为海拔不高于其所有相邻8个方向单元格的格子。 解决思路: 遍历每个单元格 检查其8个相邻单元格 如果当前单元格海拔高于任意相邻单元格,则不计为山谷 统计最终符合条件的单元格数量 关键点: 处理边界情况时,需要判断相邻单元格是否在网格范围内 只需找到任意一个相邻单元格海拔更低即可排除当前单元格 时间复杂度为O(NM),空间复

#c++#算法#开发语言
    共 164 条
  • 1
  • 2
  • 3
  • 17
  • 请选择