【团体程序涉及天梯赛】L1~L2实战反思合集(C++)

news2025/4/8 7:54:21

 实战反思汇总记录

仔细审题,想好再写

L1-104 九宫格 - 团体程序设计天梯赛-练习集

易忽略的错误:开始习惯性地看到n就以为是n*n数组了,实际上应该是9*9的固定大小数组,查了半天没查出来

L1-101 别再来这么多猫娘了! - 团体程序设计天梯赛-练习集

New:最后那两个长字符串测试点的处理,不要在一开始就将违禁词替换成“<censored>”,而是先替换成“-_-”这样的比较短的字符串,否则违禁词多的时候,不断地改成长替换词,会加重下一次查找操作的负担。故先替换成短的,最后在输出前再替换成题目要求的

string类型常用方法

getline(cin, str);//在此之前如果单独用过cin>>, 则需要在二者之间用一次getline“清空缓存”,才能够成功用getline接收

int pos = str.find( to_find, start_pos);

str.replace(pos, len, "to_replace_with")

 L2-001 紧急救援 - 团体程序设计天梯赛-练习集

尝试DFS:开始使用DFS来遍历求解,但 DFS 存在大量重复计算,像同一节点会被多次访问并重复计算路径信息,导致时间复杂度高,部分测试点未通过

改用迪杰斯特拉:为了求解,设置了很多的辅助数组,对于他们本身的初始化、以及对于起始点S的初始化赋值容易出错,需要小心

迪杰斯特拉相当于是用一次过程找出了所有点的信息,最后只需要按要求输出D对应的信息即可

迪杰斯特拉算法,通过储存每个点的信息,为后续的其他点的信息求取打下了坚实基础,用空间换取了大量时间

图论问题,应思考是否可以在dijistra的基础上改进来实现

 L2-002 链表去重 - 团体程序设计天梯赛-练习集
//混乱时,先文字写出大致的思路,然后将这思路一条条实现
//printf("%05d\n", cur_node.nxt_address);//补零输出
//段错误一般是数组访问越界导致,比如Del为空时,Del[0]是非法访问
L2-003 月饼 - 团体程序设计天梯赛-练习集

//需要结构体的存储一般可以拆成多个vector来操作,但涉及到依据某一项来整体排序就不能分别存储,结构体起到了打包排序的效果

struct Node{
    int a;
    bool operator<(const Node& other)const{
        return a < other.a;
    }
};


//精度要求高:

警惕考虑小数的问题:用double存储,且注意,两个int相除自动按int存储,要用double强转才能变成double

//int与double做乘法,得到double(向精度更高的转化)

L2-004 这是二叉搜索树吗? - 团体程序设计天梯赛-练习集!重

//特殊:独腿二叉树,如pre = {2,3,4},递归函数用if(root == tail) return;无法识别这种二叉树,需改用if(root<tail)return ;
// 用ismirror来将一般二叉树和镜像二叉搜索树的情况对应操作放在同一个函数中(详见总结博客)

二叉树三种遍历的常用性质

前序遍历

  • 根节点优先访问:前序遍历顺序是根节点、左子树、右子树,所以序列中第一个元素就是根节点的值,本题就是利用这一性质确定根节点,再根据二叉搜索树的性质划分左右子树。
  • 子树顺序性:前序遍历序列中,在根节点之后,先出现的是左子树节点值,后出现的是右子树节点值,二叉搜索树据此可找到左右子树的分界点。

中序遍历

  • 二叉搜索树的有序性:在二叉搜索树的中序遍历序列中,节点值是按照从小到大的顺序排列的。在判断一个二叉树是否为二叉搜索树等问题中,可通过检查中序遍历序列是否有序来判断。
  • 定位节点位置:结合前序或后序遍历,可以确定节点在树中的位置。如已知前序遍历找根节点,再通过中序遍历确定根节点左右子树的节点范围。

后序遍历

  • 根节点最后访问:后序遍历顺序是左子树、右子树、根节点,所以序列中最后一个元素是根节点的值。在根据遍历序列构建二叉树等问题中,可据此确定根节点。
  • 左右子树完整性:在后序遍历序列中,根节点的左右子树的节点值是连续出现的,且先左后右。可以利用这个特性来划分左右子树,进而递归处理。

一般已知一种序列不能唯一确定另一种序列,但结合二叉树的某些特殊性质可以

比如满二叉树,完全二叉树,二叉搜索树等

L2-005 集合相似度 - 团体程序设计天梯赛-练习集

遍历语句: for(int num : A) cout<<num// 可以方便地遍历常见迭代器中的元素

时间优化:set会对存进来的元素进行排序,因此相对较慢,不需要这一点是可以用unordered_set;

不熟:容器嵌套 vector<unordered_set<int>>sets;

L2-006 树的遍历 - 团体程序设计天梯赛-练习集 //已知后和中序构建二叉树,然后层序遍历

// Node(int x): val(x), left(nullptr), right(nullptr){} //struct Node中
// Node* cur_node = new Node(value);                  //调用

二叉树结构体定义!不熟!

struct Node{
	int val;
	Node* left;
	Node* right;
	Node(int x): val(x), left(nullptr), right(nullptr){}
};
Node* t_node = new Node(cur_value);


//已知二叉树,进行层序遍历:queue先存进根节点,取queue.front()为cur_node,然后边访问其值,边先后存进左右节点(非空)
//  递归的核心:大问题化成规模较小的同类型问题,套用相同操作,直到遇到终止条件
//  本题:开始已知中&后续,不断找到左右子树的中后续,套用相同操作,直到遇到空节点
//  从中序找到根节点,根节点左边就是左子树的中序遍历,得到其长度len,则后序中前len个刚好就是左子树的后序遍历,由此调整区间,重复操作

L2-008 最长对称子串 - 团体程序设计天梯赛-练习集

//防惯性:长度的最小值不是0,而是1!

对称问题不止可以用stack!从一点出发初步判断(与后一个相同或者后面第二个相同,则由此向两边展开继续判断)

L2-009 抢红包 - 团体程序设计天梯赛-练习集

题目本身不难,但在for循环嵌套中命名重复,(即for(int i){for(int i)})

关于定义同时自带成员初始化和运算符重载的结构体:

注意养成给定义函数参数带上初始值的习惯(也可以i不带,但是调用的时候记得传参,不然会报错)

惊天发现!运算重载符对sort和priority_queue的排序效果完全相反!而且sort对应的排序定义更符合常识

比如要依据id从小到大排

sort : return  id < other.id;

pq:       return id > other.ed;

ps:对于从一开始存放的vector,要注意排序时不能把第0号元素加进去一起排!

struct Node{
    int id, num_bao;
    double sum_qian;
    Node(int x = 0): id(x), num_bao(0), sum_qian(0){}
    bool operator<(const Node& other)const{
        if(sum_qian != other.sum_qian) return sum_qian < other.sum_qian;//大小
        else if(num_bao != other.num_bao) return num_bao < other.num_bao;//大小
        else return id>other.id;//小大
    }
};

L2-011 玩转二叉树 - 团体程序设计天梯赛-练习集

 //写完代码首先检查main是否打成mian!这个后面编译比较难查出来 
//实现镜像操作,可以直接在构建二叉树的时候,将左右子树的赋值互换即可
//已知先序&中序,构建二叉树不熟练:确定先序遍历讨论区间,要去掉第一个元素(其为cur_val),然后再计算len_lf:root->lf = dfs(dfs, st_in, idx-1, st_first+1, st_first+len_lf);

// Node(int x): val(x), lf(nullptr), rt(nullptr){}

L2-012 关于堆的判断 - 团体程序设计天梯赛-练习集

//建立小顶堆的过程:接收一个,就插入一个!

for (int i = 1; i <= N;i++){//建立小顶堆:记住,边插边建!
		cin >> vec[i];
		int k=i;
		while(k>1 && vec[k]<vec[k/2]){
			swap(vec[k],vec[k/2]);
			k/=2;
		}
    }

//int idx = str.find(to_find, start)

注意:是从start开始向后查找,且包含start位置本身!

//ps: rfind(tofind, start)函数是从是从start开始向前查找,且同样包含start位置本身!

注意:没有找到返回-1,但是if(-1)会被判断为true,所以应该用 if (str.find(to_find) == -1)表示查找失败

//字符串转整数:stoi(str)

//误:兄弟节点的判断:兄弟 != 存储位置差为1,因为后者有可能并非同属于一个父亲

对于完全二叉树,用 idx1 / 2 == idx2 / 2来判断

L2-013 红色警报 - 团体程序设计天梯赛-练习集

//解题反思:把问题想复杂了,觉得下面的方法复杂性偏高,一直在纠结更好的解决思路,实际上下面简单的算法就已经能够实现题目要求了
//思路简单,略显粗暴bushi,不必强求低复杂性的算法
//AC代码的思路:在开始时和每一次攻占后重新用DFS来计算联通区域个数
//看看联通区域个数是否与之前的有差异

L2-050 懂蛇语 - 团体程序设计天梯赛-练习集

关于字典的使用

查找某个键是否已经存在于字典中,返回迭代器,注意用auto接受

auto it = map.find(key);
if(it != map.end()) cout<<"存在";
else cout<<"不存在";
值得重看!L2-052 吉利矩阵 - 团体程序设计天梯赛-练习集

题目分析:并不是真的要将构建好的矩阵的所有元素都存下来,而是要找到唯一生成题目要求矩阵的逻辑,每跑通一次逻辑,就相当于生成一个矩阵。

此时,我们只要保证生成的过程是“单方向的”,也就是通过递归函数中for的单方向给每个元素赋值,就保证了生成矩阵的唯一性。从而:跑通的次数 = 矩阵的种类数

关于完善代码:尝试在细节的地方加入一些判断,有可能就会补上之前逻辑中的漏洞

比如一开始,笔者用最后一行元素总和为L来进行判断矩阵符合要求,但是总和为L不能保证每一个元素都在【0,L】的范围里面,可见完善代码的过程中不厌其烦地加入判断是必要的。

!!注意递归函数对一般位置的处理和特殊位置的处理

特殊位置有特殊性质(初始位置& 边界位置):

  • 最后一行的元素,都是“由该列已经生成的元素决定的,值唯一为L-sum(该列其他)”;

  • 每行最右边的元素: 值都是由该行左边所有元素之和决定的,值唯一为L-sum_left

递归函数编写顺序:按照执行的先后顺序来编写,而不是按照代码的先后顺序来编写

也就是,先保证起始部分的代码,接着对边界位置进行处理,最后写结束部分的处理,注意不同模块之间的衔接

递归思路:从左上角开始,逐行进行,每行从左到右,每次对一个元素进行操作

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaScript双问号操作符(??)详解,解决使用 || 时因类型转换带来的问题

目录 JavaScript双问号操作符&#xff08;??&#xff09;详解&#xff0c;解决使用||时因类型转换带来的问题 一、双问号操作符??的基础用法 1、传统方式的痛点 2、双问号操作符??的精确判断 3、双问号操作符??与逻辑或操作符||的对比 二、复杂场景下的空值处理 …

蓝桥杯 web 展开你的扇子(css3)

普通答案&#xff1a; #box:hover #item1{transform: rotate(-60deg); } #box:hover #item2{transform: rotate(-50deg); } #box:hover #item3{transform: rotate(-40deg); } #box:hover #item4{transform: rotate(-30deg); } #box:hover #item5{transform: rotate(-20deg); }…

聚焦楼宇自控:优化建筑性能,引领智能化管控与舒适环境

在当今建筑行业蓬勃发展的浪潮中&#xff0c;人们对建筑的要求早已超越了传统的遮风避雨功能&#xff0c;而是更加注重建筑性能的优化、智能化的管控以及舒适环境的营造。楼宇自控系统作为现代建筑技术的核心力量&#xff0c;正凭借其卓越的功能和先进的技术&#xff0c;在这几…

Ubuntu16.04配置远程连接

配置静态IP Ubuntu16.04 修改超管账户默认密码 # 修改root账户默认密码 sudo passwd Ubuntu16.04安装SSH # 安装ssh服务&#xff1a; sudo apt-get install ssh# 启动SSH服务&#xff1a; sudo /etc/init.d/ssh start # 开机自启 sudo systemctl enable ssh# 如无法连接&…

基于springboot微信小程序课堂签到及提问系统(源码+lw+部署文档+讲解),源码可白嫖!

摘要 随着信息时代的来临&#xff0c;过去的课堂签到及提问管理方式的缺点逐渐暴露&#xff0c;本次对过去的课堂签到及提问管理方式的缺点进行分析&#xff0c;采取计算机方式构建基于微信小程序的课堂签到及提问系统。本文通过阅读相关文献&#xff0c;研究国内外相关技术&a…

互联网三高-高性能之JVM调优

1 运行时数据区 JVM运行时数据区是Java虚拟机管理的内存核心模块&#xff0c;主要分为线程共享和线程私有两部分。 &#xff08;1&#xff09;线程私有 ① 程序计数器&#xff1a;存储当前线程执行字节码指令的地址&#xff0c;用于分支、循环、异常处理等流程控制‌ ② 虚拟机…

封装可拖动弹窗(vue jquery引入到html的版本)

vue cli上简单的功能&#xff0c;在js上太难弄了&#xff0c;这个弹窗功能时常用到&#xff0c;保存起来备用吧 备注&#xff1a;deepseek这个人工智障写一堆有问题的我&#xff0c;还老服务器繁忙 效果图&#xff1a; html代码&#xff1a; <div class"modal-mask&qu…

【技术报告】GPT-4o 原生图像生成的应用与分析

【技术报告】GPT-4o 原生图像生成的应用与分析 1. GPT-4o 原生图像生成简介1.1 文本渲染能力1.2 多轮对话迭代1.3 指令遵循能力1.4 上下文学习能力1.5 跨模态知识调用1.6 逼真画质与多元风格1.7 局限性与安全性 2. GPT-4o 技术报告2.1 引言2.2 安全挑战、评估与缓解措施2.2.1 安…

初阶数据结构(3)顺序表

Hello~,欢迎大家来到我的博客进行学习&#xff01; 目录 1.线性表2.顺序表2.1 概念与结构2.2 分类2.2.1 静态顺序表2.2.2 动态顺序表 2.3 动态顺序表的实现初始化尾插头插尾删头删查找指定位置之前插入数据删除指定位置的数据销毁 1.线性表 首先我们需要知道的是&#xff0c;…

谷歌发布网络安全AI新模型Sec-Gemini v1

谷歌近日宣布推出实验性AI模型Sec-Gemini v1&#xff0c;旨在通过人工智能技术革新网络安全防御体系。该模型由Sec-Gemini团队成员Elie Burzstein和Marianna Tishchenko共同研发&#xff0c;旨在帮助网络安全人员应对日益复杂的网络威胁。 攻防不对称的破局之道 Sec-Gemini团队…

Meta LLaMA 4:对抗 GPT-4o 与 Claude 的开源王牌

2025 年 4 月&#xff0c;Meta 正式发布了 LLaMA 4 系列的首批两款模型。 这两款模型模型分别是&#xff1a;LLaMA 4 Scout 与 LLaMA 4 Maverick&#xff0c;均采用了 专家混合架构&#xff08;Mixture-of-Experts, MoE&#xff09;。 据 Meta 表示&#xff0c;这是首次有 …

企业级 ClickHouse Docker 离线部署实践指南20250407

企业级 ClickHouse Docker 离线部署实践指南 引言 在数据分析与日志处理日益重要的今天&#xff0c;ClickHouse 凭借其高性能、列式存储架构&#xff0c;成为企业在大数据分析中的首选引擎之一。本文基于一位金融行业从业者在离线网络环境中部署 ClickHouse 的真实实践过程&a…

DeepSeek-MLA

MLA 结构 需要缓存 KV 向量共用的压缩隐特征K 向量多头共享的带位置编码的向量 为什么带有位置信息的 Q 向量来自于隐特征向量&#xff0c;而带有位置的 K 向量来自于 H 向量且共享呢&#xff1f; 最好的方法肯定是从H向量直接计算并且不共享&#xff0c;但是会大大增加显存使…

pyTorch-迁移学习-学习率衰减-四种天气图片多分类问题

目录 1.导包 2.加载数据、拼接训练、测试数据的文件夹路径 3.数据预处理 3.1 transforms.Compose数据转化 3.2分类存储的图片数据创建dataloader torchvision.datasets.ImageFolder torch.utils.data.DataLoader 4.加载预训练好的模型(迁移学习) 4.1固定、修改预训练…

vscode Colipot 编程助手

1、登录到colipot&#xff0c;以github账号&#xff0c;关联登录 点击【continue】按钮&#xff0c;继续。 点击【打开Visual Studio Code】&#xff0c;回到vscode中。 2、问一下11? 可以看出&#xff0c;很聪明&#xff0c;一下子就算出来了。 3、帮我们写一个文件&#xf…

1、window 下SDL 下载使用, 测试环境搭建

1. SDL3下载 官网&#xff1a; https://www.libsdl.org/ 点击SDL Releases 或者 SDL GItHub 进入github下载&#xff1a; 因为自己在windows下使用的mingw,所以下载mingw版的&#xff0c;也可以 下载源码自己编译。 2. 项目搭建 这里使用的时mingw vsocde cmake, 可以使…

OpenGL学习笔记(模型材质、光照贴图)

目录 光照与材质光照贴图漫反射贴图采样镜面光贴图 GitHub主页&#xff1a;https://github.com/sdpyy OpenGL学习仓库:https://github.com/sdpyy1/CppLearn/tree/main/OpenGLtree/main/OpenGL):https://github.com/sdpyy1/CppLearn/tree/main/OpenGL 光照与材质 在现实世界里&…

视频分析设备平台EasyCVR打造汽车门店经营场景安全:AI智慧安防技术全解析

一、方案背景 某电动车企业不停爆出维权新闻&#xff0c;支持和反对的声音此起彼伏&#xff0c;事情不断发酵、反转&#xff0c;每天都有新消息&#xff0c;令人目不暇接。车展、车店作为维权事件的高发场所&#xff0c;事后复盘和责任认定时&#xff0c;安防监控和视频监控平…

Hibernate里的对象不同状态和Session的核心方法

临时状态的测试 Student student new Student("张三", "男", 22, new Date()); 以上student就是一个Transient(临时状态),此时student并没有被session进行托管&#xff0c;即在session的缓存中还不存在student这个对象&#xff0c;当执行完save方法后&a…

模型嵌入式部署

背景 自从深度学习大规模应用以来&#xff0c;其中一个应用方向就是将深度学习视觉算法部署到嵌入式平台上&#xff0c;使用NPU推理。虽然已经做了很久的模型部署&#xff0c;但一直都是在公司默默耕耘&#xff0c;为了发展一下自己“边缘部署专家”这个个人品牌&#xff0c;打…