4小时编码练习计划,专注于贪心算法和复杂模拟题,旨在锻炼您的算法思维、代码实现能力和耐心。

下午 (4小时): 贪心思维与代码实现力

今天的重点是两种在算法竞赛和工程中都至关重要的能力:贪心选择复杂逻辑的精确实现。贪心算法考察的是能否洞察问题的本质,做出局部最优决策;而复杂模拟题则考验代码的组织能力、细节处理和调试耐心,这同样是CCF认证考试中的高频考点。

练习计划概览

  • 总时长: 约 4 小时

  • 核心目标:

    1. 理解贪心算法的本质:在每一步选择中都采取当前状态下最好或最优的选择,从而希望导致全局结果最好或最优。

    2. 学习并实践经典的贪心模型,如区间调度问题。

    3. 挑战一道需求复杂、规则繁多的CCF真题,锻炼将大段文字描述转化为精确代码逻辑的能力。

    4. 提升代码调试能力和处理繁杂逻辑时的耐心与细致度。


第一部分:贪心算法——洞察局部最优解 (约 1.5 小时)

贪心算法的核心在于“贪”。它不从整体最优上加以考虑,所做的选择只是在某种意义上的局部最优解。关键在于,你需要判断并证明这种局部最优选择能否导向全局最优。

题目编号题目名称核心知识点练习目标
P1803凌乱的yyy / 线段覆盖贪心排序区间问题经典必做题。这是最经典的贪心问题之一:活动选择问题。学习如何通过对区间的某个关键属性(如结束时间)进行排序,然后进行贪心选择,以达成覆盖最多线段(或安排最多活动)的目标。
CCF202303-2垦田计划贪心二分答案在有限资源下,如何分配资源以最小化总体耗时。这是一个“二分答案 + 贪心验证”的经典模型。贪心体现在:当我们确定一个目标天数后,总是优先在“性价比”最高(缩短一天耗费资源最少)的田地上投入资源。
题解
//P1803-先处理数据,然后贪心计算。#include <iostream>
#include <vector>
#include <algorithm>using namespace std;int main(){int n;cin >> n;int now = 0;int cnt = 0;vector<pair<int,int>> v;    while(n--){int start,end;cin >> start >> end;v.push_back(make_pair(start,end));}sort(v.begin(),v.end(),[](auto a,auto b){return a.second < b.second;});for(auto p : v){if(p.first>=now){now = p.second;cnt++;}}cout << cnt;return 0;
}
//29-2 使用二分限定范围,然后用贪心判断这个各个情况下的可行性和结果#include <iostream>
#include <vector>
#include <algorithm>using namespace std;int main(){ios::sync_with_stdio(false);cin.tie(nullptr);int n, m, k;cin >> n >> m >> k;vector<pair<int, int>> areas(n); // {time, cost}for(int i = 0; i < n; i++){cin >> areas[i].first >> areas[i].second; // time, cost}// 二分查找最优答案int left = k, right = 0;for(int i = 0; i < n; i++){right = max(right, areas[i].first);}while(left < right){int mid = (left + right) / 2;long long need = 0;// 计算达到mid天数需要的总资源for(int i = 0; i < n; i++){if(areas[i].first > mid){need += (long long)(areas[i].first - mid) * areas[i].second;}}if(need <= m){right = mid;} else {left = mid + 1;}}cout << left << endl;return 0;
}

练习建议:

  • P1803: 解决此题的关键在于想清楚应该按什么标准进行排序。按开始时间?按区间长度?还是按结束时间?尝试思考不同排序策略的优劣,并理解为什么“按结束时间升序排序”是正确的贪心策略。

  • CCF202303-2: 这类问题直接贪心不好做,但可以思考:如果我猜最终答案是 T 天,我能否用现有的 m 个资源实现这个目标?这个“能否实现”的子问题就可以用贪心来快速判断。这是一种非常重要的思想。


第二部分:复杂模拟——代码实现的试金石 (约 2 小时)

这类题目通常没有复杂的算法,但规则繁多、细节量大,极其考验代码的组织能力、细心程度和调试能力。在CCF认证中,这类题目通常是区分选手代码硬实力的关键。

(请从以下两题中精选一题进行攻克)

题目编号题目名称核心知识点练习目标
选项A:
CCF202305-3
解压缩字符串处理位运算模拟完美复刻您提到的“耐心编码实现”目标。需要严格按照题目给定的、包含多种情况的压缩格式进行字节流解析。这道题将极大地锻炼您对题意的精确理解和代码的严谨性。
选项B:
CCF202303-3
LDAP字符串解析递归/栈模拟类似于“JSON查询”,本题需要解析一种带有逻辑与/或的嵌套查询语言。您需要设计数据结构来存储用户信息,并使用递归或栈来解析查询表达式,是练习复杂逻辑和数据处理的绝佳选择.
题解
//30-3 重难点就在理解那三四版的内容,然后转化成代码,注意边界处理,实则主要是耗时和注意力。#include <iostream>
#include <cstdio>
#include <string>using namespace std;
typedef long long LL;
const int N = 5e6 + 10;char str[N], ret[N];
int s, cnt, i;int tran(string str, int t) { // t进制转十进制int ret = 0;for (int i = 0; i < str.size(); i++) {if (isdigit(str[i])) ret = ret * t + str[i] - '0';else ret = ret * t + str[i] - 'a' + 10;}return ret;
}string twostr(char c1, char c2) { // 16进制转2进制string ret = "00000000";int a = isdigit(c1) ? c1 - '0' : c1 - 'a' + 10, b = isdigit(c2) ? c2 - '0' : c2 - 'a' + 10; // 改为数字for (int i = 3; i >= 0 && a; i--) { // 前四位ret[i] = a % 2 + '0';a /= 2;}for (int i = 7; i >= 4 && b; i--) { // 后四位ret[i] = b % 2 + '0';b /= 2;}return ret;
}int main() {cin >> s;for (int i = 0; i < (s - 1) / 8 + 1; i++) scanf("%s", str + i * 16);for (i = 0; i < s * 2; i += 2) { // 引导域string ss; ss += str[i]; ss += str[i + 1];if (tran(ss, 16) < 128) break; // 最高位为0,退出}for (i += 2; i < s * 2; i += 2) {string ss = twostr(str[i], str[i + 1]);if (ss[6] == '0' && ss[7] == '0') { // 字面量int le = tran(ss.substr(0, 6), 2), p, ct; // 获取字面量长度-1的值if (le >= 60) { // le+1>=61int dx = le - 59; // 存储字面量长度的字节数string lee;for (p = i + dx * 2; p > i; p -= 2) { // 小端序拼接lee += str[p]; lee += str[p + 1];}le = tran(lee, 16); // 获取字面量长度-1的值i += dx * 2;}for (p = i + 2, ct = 0; ct < le + 1; p += 2, ct++) { // 存储字面量字节ret[cnt++] = str[p];ret[cnt++] = str[p + 1];}i = p - 2;}else { // 回溯引用int l, o;if (ss[6] == '0' && ss[7] == '1') { // 01形式l = tran(ss.substr(3, 3), 2) + 4;ss = ss.substr(0, 3); ss += twostr(str[i + 2], str[i + 3]);i += 2;o = tran(ss, 2);}else { // 10形式l = tran(ss.substr(0, 6), 2) + 1;ss.clear(); ss += str[i + 4]; ss += str[i + 5]; ss += str[i + 2]; ss += str[i + 3];i += 4;o = tran(ss, 16);}int pcnt = cnt / 2; // 存一下现在的字节数for (int p = 2 * (pcnt - o), ct = 0; ct < l; p += 2, ct++) { // 从第pcnt-o个字节开始,输出l个字节if (o < l && p == 2 * pcnt) p = 2 * (pcnt - o); // 如果o<l,且到了末尾,回到起点,反复输出ret[cnt++] = ret[p];ret[cnt++] = ret[p + 1];}}}for (int i = 0; i < cnt; i++) {if (i && i % 16 == 0) cout << endl;cout << ret[i];}return 0;
}

练习建议:

  • 先规划再动手: 在写代码之前,花15-20分钟仔细阅读题目,用纸笔把所有规则、分支和状态转移想清楚。可以为不同的功能模块设计独立的函数(如“解析一个元素”、“处理一次查询”),让主逻辑更清晰。

  • 分步验证: 不要试图一次性写完所有代码。可以先实现最核心、最简单的部分(例如,只处理一种类型的元素或一种查询),验证无误后,再逐步添加其他复杂情况。

  • 利用样例: 充分利用题目给出的样例,一步步手动模拟程序执行过程,对比自己的输出和预期输出,可以帮助快速定位逻辑错误。


目标达成自查 (约 0.5 小时)

完成以上练习后,进行复盘和总结:

  1. 关于贪心算法:

    • 我解决贪心问题的一般思路是什么?(例如:排序 -> 循环 -> 按规则选择)

    • 垦田计划 这道题,为什么不能直接贪心,而要结合二分?(因为贪心的“性价比”会随着目标天数的改变而改变,没有一个固定的贪心标准)

  2. 关于复杂模拟:

    • 在处理 解压缩 或 LDAP 时,我遇到了哪些困难?(例如:边界条件、状态管理、字符串处理的细节)

    • 我是如何组织我的代码来避免逻辑混乱的?(例如:使用结构体、类、辅助函数)

    • 如果再做一次,哪些地方可以改进,从而更快更准确地完成编码?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/95711.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/95711.shtml
英文地址,请注明出处:http://en.pswp.cn/web/95711.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JS多行文本溢出处理

在网页开发中&#xff0c;多行文本溢出是常见的界面问题。当文本内容超出容器限定的高度和宽度时&#xff0c;若不做处理会破坏页面布局的整洁性&#xff0c;影响用户体验。本文将详细介绍两种主流的多行文本溢出解决方案&#xff0c;并从多个维度进行对比&#xff0c;帮助开发…

C++(Qt)软件调试---bug排查记录(36)

C(Qt)软件调试—bug排查记录&#xff08;36&#xff09; 文章目录C(Qt)软件调试---bug排查记录&#xff08;36&#xff09;[toc]1 无返回值函数风险2 空指针调用隐患3 Debug/Release差异4 ARM架构char符号问题5 linux下找不到动态库更多精彩内容&#x1f449;内容导航 &#x1…

人工智能领域、图欧科技、IMYAI智能助手2025年8月更新月报

IMYAI 平台 2025 年 8 月功能更新与模型上新汇总 2025年08月31日 功能更新&#xff1a; 对话与绘画板块现已支持多文件批量上传。用户可通过点击或拖拽方式一次性上传多个图片或文件&#xff0c;操作更加便捷。2025年08月25日近期更新亮点&#xff1a; 文档导出功能增强&#x…

2025独立站技术风向:无头电商+PWA架构实战指南

根据 Gitnux 的统计数据&#xff0c;预计到 2025 年&#xff0c;北美将有 60% 的大型零售商采用无头平台。而仍在传统架构上运营的独立站&#xff0c;平均页面加载速度落后1.8秒&#xff0c;转化率低32%。无独有偶&#xff0c;Magento Association 的一项调查显示&#xff0c;7…

淘宝京东拼多多爬虫实战:反爬对抗、避坑技巧与数据安全要点

一、先搞懂&#xff1a;电商爬虫的 3 大核心挑战&#xff08;比普通爬虫更复杂的原因&#xff09; 做电商爬虫前&#xff0c;必须先明确「为什么难」—— 淘宝、京东、拼多多的反爬体系是「多层级、动态化、行为导向」的&#xff0c;绝非简单的 UA 验证或 IP 封禁&#xff1a;…

【1】MOS管的结构及其工作原理

以nmos举例&#xff0c;mos管由三个电极&#xff1a;G极&#xff08;gate&#xff09;、D极&#xff08;drain&#xff09;、S极&#xff08;source&#xff09;和一个衬底组成&#xff0c;而这三个电极之间通过绝缘层相隔开&#xff1b;①既然GDS三个电极之间两两相互绝缘&…

如何保存训练的最优模型和使用最优模型文件

一 保存最优模型主要就是我们在for循环中加上一个test测试&#xff0c;并且我还在test函数后面加上了返回值&#xff0c;可以返回准确率&#xff0c;然后每次进行一次对比&#xff0c;然后取大的。然后这里有两种保存方式&#xff0c;一种是保存了整个模型&#xff0c;另一个是…

vue3+ts+echarts多Y轴折线图

因为放在了子组件才监听&#xff0c;加载渲染调用&#xff0c;有暗黑模式才调用&#xff0c;<!-- 温湿度传感器 --><el-row v-if"deviceTypeId 2"><el-col :xs"24" :sm"24" :md"24" :lg"24" :xl"24&qu…

基于Taro4打造的一款最新版微信小程序、H5的多端开发简单模板

基于Taro4、Vue3、TypeScript、Webpack5打造的一款最新版微信小程序、H5的多端开发简单模板 特色 &#x1f6e0;️ Taro4, Vue 3, Webpack5, pnpm10 &#x1f4aa; TypeScript 全新类型系统支持 &#x1f34d; 使用 Pinia 的状态管理 &#x1f3a8; Tailwindcss4 - 目前最流…

ITU-R P.372 无线电噪声预测库调用方法

代码功能概述&#xff08;ITURNoise.c&#xff09;该代码是一个 ITU-R P.372 无线电噪声预测 的计算程序&#xff0c;能够基于 月份、时间、频率、地理位置、人为噪声水平 计算特定地点的 大气噪声、银河噪声、人为噪声及其总和&#xff0c;并以 CSV 或标准输出 方式提供结果。…

《从报错到运行:STM32G4 工程在 Keil 中的头文件配置与调试实战》

《从报错到运行&#xff1a;STM32G4 工程在 Keil 中的头文件配置与调试实战》文章提纲一、引言• 阐述 STM32G4 在嵌入式领域的应用价值&#xff0c;说明 Keil 是开发 STM32G4 工程的常用工具• 指出头文件配置是 STM32G4 工程在 Keil 中开发的关键基础环节&#xff0c;且…

Spring 事务提交成功后执行额外逻辑

1. 场景与要解决的问题在业务代码里&#xff0c;常见诉求是&#xff1a;只有当数据库事务真正提交成功后&#xff0c;才去执行某些“后置动作”&#xff0c;例如&#xff1a;发送 MQ、推送消息、写审计/埋点日志、刷新缓存、通知外部系统等。如果这些动作在事务提交前就执行&am…

Clickhouse MCP@Mac+Cherry Studio部署与调试

一、需求背景 已经部署测试了Mysql、Drois的MCP Server,想进一步测试Clickhouse MCP的表现。 二、环境 1)操作系统 MacOS+Apple芯片 2)Clickhouse v25.7.6.21-stable、Clickhouse MCP 0.1.11 3)工具Cherry Studio 1.5.7、Docker Desktop 4.43.2(199162) 4)Python 3.1…

Java Serializable 接口:明明就一个空的接口嘛

对于 Java 的序列化,我之前一直停留在最浅层次的认知上——把那个要序列化的类实现 Serializbale 接口就可以了嘛。 我似乎不愿意做更深入的研究,因为会用就行了嘛。 但随着时间的推移,见到 Serializbale 的次数越来越多,我便对它产生了浓厚的兴趣。是时候花点时间研究研…

野火STM32Modbus主机读取寄存器/线圈失败(三)-尝试将存贮事件的地方改成数组(非必要解决方案)(附源码)

背景 尽管crc校验正确了&#xff0c;也成功发送了EV_MASTER_EXECUTE事件&#xff0c;但是eMBMasterPoll( void )中总是接收的事件是EV_MASTER_FRAME_RECEIVED或者EV_MASTER_FRAME_SENT&#xff0c;一次都没有执行EV_MASTER_EXECUTE。EV_MASTER_EXECUTE事件被别的事件给覆盖了&…

微信小程序校园助手程序(源码+文档)

源码题目&#xff1a;微信小程序校园助手程序&#xff08;源码文档&#xff09;☑️ 文末联系获取&#xff08;含源码、技术文档&#xff09;博主简介&#xff1a;10年高级软件工程师、JAVA技术指导员、Python讲师、文章撰写修改专家、Springboot高级&#xff0c;欢迎高校老师、…

59-python中的类和对象、构造方法

1. 认识一下对象 世间万物皆是"对象" student_1{ "姓名":"小朴", "爱好":"唱、跳、主持" ......... }白纸填写太落伍了 设计表格填写先进一些些 终极目标是程序使用对象去组织数据程序中设计表格&#xff0c;我们称为 设计类…

向成电子惊艳亮相2025物联网展,携工控主板等系列产品引领智造新风向

2025年8月27-29日&#xff0c;IOTE 2025 第二十四届国际物联网展深圳站在深圳国际会展中心&#xff08;宝安&#xff09;盛大启幕&#xff01;作为全球规模领先的物联网盛会之一&#xff0c;本届展会以“生态智能&#xff0c;物联全球”为核心&#xff0c;汇聚超1000家全球头部…

阵列信号处理之均匀面阵波束合成方向图的绘制与特点解读

阵列信号处理之均匀面阵波束合成方向图的绘制与特点解读 文章目录前言一、方向图函数二、方向图绘制三、副瓣电平四、阵元个数对主瓣宽度的影响五、阵元间距对主瓣宽度的影响六、MATLAB源代码总结前言 \;\;\;\;\;均匀面阵&#xff08;Uniform Planar Array&#xff0c;UPA&…

算法在前端框架中的集成

引言 算法是前端开发中提升性能和用户体验的重要工具。随着 Web 应用复杂性的增加&#xff0c;现代前端框架如 React、Vue 和 Angular 提供了强大的工具集&#xff0c;使得将算法与框架特性&#xff08;如状态管理、虚拟 DOM 和组件化&#xff09;无缝集成成为可能。从排序算法…