当前位置: 首页 > news >正文

GESP认证C++编程真题解析 | 202412 四级

​欢迎大家订阅我的专栏:算法题解:C++与Python实现!
本专栏旨在帮助大家从基础到进阶 ,逐步提升编程能力,助力信息学竞赛备战!

专栏特色
1.经典算法练习:根据信息学竞赛大纲,精心挑选经典算法题目,提供清晰的代码实现与详细指导,帮助您夯实算法基础。
2.系统化学习路径:按照算法类别和难度分级,从基础到进阶,循序渐进,帮助您全面提升编程能力与算法思维。

适合人群:

  • 准备参加蓝桥杯、GESP、CSP-J、CSP-S等信息学竞赛的学生
  • 希望系统学习C++/Python编程的初学者
  • 想要提升算法与编程能力的编程爱好者

附上汇总帖:GESP认证C++编程真题解析 | 汇总


编程题

B4068 Recamán

【题目来源】

洛谷:B4068 [GESP202412 四级] Recamán - 洛谷

【题目描述】

小杨最近发现了有趣的 Recamán 数列,这个数列是这样生成的:

  • 数列的第一项 \(a_1\)\(1\)
  • 如果 \(a_{k−1}−k\) 是正整数并且没有在数列中出现过,那么数列的第 \(k\)\(a_k\)\(a_{k−1}−k\),否则为 \(a_{k−1}+k\)

小杨想知道 Recamán 数列的前 \(n\) 项从小到大排序后的结果。手动计算非常困难,小杨希望你能帮他解决这个问题。

【输入】

第一行,一个正整数 \(n\)

【输出】

一行,\(n\) 个空格分隔的整数,表示 Recamán 数列的前 \(n\) 项从小到大排序后的结果。

【输入样例】

5

【输出样例】

1 2 3 6 7

【算法标签】

《洛谷 B4068 Recamán》 #GESP# #2024#

【代码详解】

#include <bits/stdc++.h>
using namespace std;map<int, int> mp;  // 用于记录已经生成的数值
const int N = 3005;  // 定义数组的最大大小
int n;  // 输入的n值
int a[N];  // 存储生成的序列int main() {cin >> n;  // 输入n// 初始化序列的第一个元素为1,并记录到map中a[1] = 1;mp[1] = 1;// 生成序列的第2到第n个元素for (int i = 2; i <= n; i++) {// 尝试用前一个元素减去当前索引iif (a[i - 1] - i > 0 && mp[a[i - 1] - i] == 0) {a[i] = a[i - 1] - i;mp[a[i]] = 1;  // 标记该值已存在} else {// 如果不能减,则用前一个元素加上当前索引ia[i] = a[i - 1] + i;mp[a[i]] = 1;  // 标记该值已存在}}// 对生成的序列进行排序sort(a + 1, a + n + 1);// 输出排序后的序列for (int i = 1; i <= n; i++) {cout << a[i] << " ";}cout << endl;return 0;
}

【运行结果】

5
1 2 3 6 7 

B4069 字符排序

【题目来源】

洛谷:[B4069 GESP202412 四级] 字符排序 - 洛谷

【题目描述】

小杨有 \(n\) 个仅包含小写字母的字符串 \(s_1,s_2,…,s_n\),小杨想将这些字符串按一定顺序排列后拼接到一起构成字符串 \(t\)。小杨希望最后构成的字符串 \(t\) 满足:

  • 假设 \(t_i\) 为字符串 \(t\) 的第 \(i\) 个字符,对于所有的 \(j<i\) 均有 \(t_j≤t_i\)。两个字符的大小关系与其在字母表中的顺序一致,例如 \(e<g<p<s\)

小杨想知道是否存在满足条件的字符串排列顺序。

【输入】

第一行包含一个正整数 \(T\),代表测试数据组数。

对于每组测试数据,第一行包含一个正整数 \(n\),含义如题面所示。

之后 \(n\) 行,每行包含一个字符串 \(s_i\)

【输出】

对于每组测试数据,如果存在满足条件的排列顺序,输出(一行一个)\(1\),否则输出(一行一个) \(0\)

【输入样例】

3
3
aa
ac
de
2
aac
bc
1
gesp

【输出样例】

1
0
0

【算法标签】

《洛谷 B4069 字符排序》 #GESP# #2024#

【代码详解】

#include <bits/stdc++.h>
using namespace std;const int N = 105;  // 定义最大字符串数量
int T;              // 测试用例的数量
string s[N];        // 存储输入的字符串
int f[N * 10];      // 动态规划数组,用于计算最长非递减子序列int main() {cin >> T;  // 输入测试用例数量while (T--) {  // 处理每个测试用例int n;cin >> n;  // 输入字符串数量// 输入所有字符串for (int i = 1; i <= n; i++)cin >> s[i];// 对字符串进行字典序排序sort(s + 1, s + n + 1);// 将所有字符串拼接成一个长字符串str(前面加一个空格)string str = " ";for (int i = 1; i <= n; i++)str += s[i];int len = str.size() - 1;  // 获取有效字符长度(去掉开头的空格)memset(f, 0, sizeof f);  // 初始化动态规划数组// 计算最长非递减子序列for (int i = 1; i <= len; i++) {f[i] = 1;  // 初始化为1(至少包含当前字符)for (int j = 1; j < i; j++) {if (str[j] <= str[i])  // 如果前一个字符不大于当前字符f[i] = max(f[i], f[j] + 1);  // 更新最长子序列长度}}// 判断最长非递减子序列是否等于字符串长度if (f[len] == len)cout << "1" << endl;  // 是,说明整个字符串是非递减的elsecout << "0" << endl;  // 否,说明存在递减部分}return 0;
}

【运行结果】

3
3
aa
ac
de
1
2
aac
bc
0
1
gesp
0
http://www.jsqmd.com/news/261930/

相关文章:

  • 通义千问2.5-7B-Instruct保姆级教程:从零开始GPU部署实操
  • MinerU 2.5代码实例:批量处理PDF文档的自动化脚本
  • selenium全局搜索
  • UDS 31服务ECU实现过程中的常见问题解析
  • 体验最新AI模型入门必看:云端GPU按需付费成主流
  • 虚拟手柄终极指南:如何用vJoy将键盘变成专业游戏控制器
  • 网盘直链下载助手:八大平台真实下载地址一键获取终极指南
  • 从零实现干净系统状态:Vivado完整卸载方案
  • AI手势识别与追踪多语言支持:国际化部署方案
  • IQuest-Coder-V1推理卡顿?显存优化部署实战案例解析
  • BGE-Reranker-v2-m3优化方案:降低企业检索系统成本
  • 深度学习实战:SpliceAI基因剪接变异预测完整解析
  • 5分钟掌握网盘全速下载秘籍:免费工具助你告别龟速下载
  • LabVIEW与Multisim共存时数据库权限冲突实战解析
  • Qwen3-Embedding-4B应用研究:跨语言信息检索方案
  • 零基础入门UI-TARS-desktop:内置Qwen3-4B模型一键启动指南
  • 网盘直链下载助手:八大主流网盘高速下载完整指南
  • 如何快速掌握jsPDF:前端PDF生成的完整实践指南
  • 如何高效解析复杂文档?试试PaddleOCR-VL-WEB多语言SOTA方案
  • PowerToys图像调整器:3分钟掌握批量图片尺寸处理的终极方案
  • DLSS Swapper终极指南:一键优化游戏性能的免费神器
  • 通义千问3-4B如何提升吞吐?vLLM并行处理部署教程
  • MinerU文档链接提取系统:参考文献自动收集
  • socat-windows终极使用指南:10个核心场景解决方案
  • encoderfile 分发以及运行tansformer 编码为单一文件的工具
  • 如何5步解锁网盘下载新体验:八大云盘免会员高速下载秘籍
  • ComfyUI Essentials终极指南:5大核心功能让AI图像处理效率翻倍
  • 如何快速提升网盘下载速度:终极直链解析指南
  • 八大云盘高速下载神器:免登录直链解析全攻略
  • D3KeyHelper暗黑3技能连点器终极指南:从新手到高手的快速上手秘籍