编程比赛 入门 学习路线

news2025/2/21 4:02:34


内容若有不足与纰漏,请多指教!


文章目录

  • 写在前面
  • 入门建议掌握的知识点
    • 数学思想
    • 算法 | 数据结构
    • c++ STL
      • 容器类
      • 容器适配器
      • 组件
      • 迭代器
      • 常用算法函数
    • 其他
  • 编程 | 学习
    • 学习 | 练题 平台
    • 编程笔记 | 题解
  • 比赛相关要点注意
    • 赛前
    • 赛中
    • 赛后
  • 资料分享
    • 笔记题解
    • 资料PDF(可打印)
    • 题目及题解PDF
  • 贡献者


写在前面

学编程 切记绝对不能偷懒!!!看课和刷题是必要的,越勤越多越好!!!
编程思维学和练 出来的,没有其他任何捷径!!!

光说不练假把式,光练不说傻把式,又练又说真把式。

借助工具来学习,减少无效时间的浪费,比如chatgpt(百度搜索 “chatgpt镜像网站” ,选一个就行),哪里不懂都问它。


入门建议掌握的知识点

数学思想

  • 高精度算法、大数处理、取模运算、进制转换、位运算
  • 数论(素数、最大公约数、最小公倍数、分解质因数)
  • 组合计数(排列、容斥)
  • 差分、前缀和、快速幂
  • 博弈论
  • 其他

算法 | 数据结构

  • 暴力、枚举与模拟、递归与分治、字符串处理、排序、二分、双指针、区间合并
  • 贪心、并查集、KMP
  • 动态规划DP(背包问题、线性DP、区间DP、状态压缩DP、记忆化搜索)
  • 搜索(BFS、DFS、剪枝优化、回溯)
  • 线性数据结构(数组、链表、队列、栈)
  • 复杂数据结构(树、二叉树、图、哈希表)
  • 最短路
  • 其他

c++ STL

容器类

  1. 序列式容器(Sequence Containers):
  • vector:动态数组,支持随机访问,可动态扩展大小。
  • deque:双端队列,支持双向访问,可高效插入删除首尾元素。
  • list:双向链表,支持顺序访问,可高效插入删除。
  1. 关联式容器(Associative Containers):
  • set:基于红黑树实现的无序集合,元素唯一,并按照从小到大排列。
  • multiset:基于红黑树实现的无序集合,元素可重复,并按照从小到大排列。
  • map:基于红黑树实现的关联数组,键值对存储,自动排序。
  • multimap:基于红黑树实现的关联数组,键可以重复,键值对按照插入顺序存储。
  1. 无序关联式容器(Unordered Associative Containers):
  • unordered_set:基于哈希表实现的无序集合,元素唯一,按照哈希值分组,查找复杂度为 O(1)。
  • unordered_multiset:基于哈希表实现的无序集合,元素可重复,按照哈希值分组,查找复杂度为 O(1)。
  • unordered_map:基于哈希表实现的关联数组,键值对存储,自动扩容和重组,查找复杂度为 O(1)。
  • unordered_multimap:基于哈希表实现的关联数组,键可以重复,键值对按照插入顺序存储,查找复杂度为 O(1)。

容器适配器

  • stack 是基于 deque 或 vector 或 list 实现的栈容器适配器,支持后进先出(LIFO)的元素存取。由于栈的特殊性,只允许从栈顶进行插入和删除操作,因此其接口与 vector 容器类似,只提供了 push、pop、top 等操作。
  • queue 是基于 deque 或 list 实现的队列容器适配器,支持先进先出(FIFO)的元素存取。队列要求从队尾插入元素,从队头删除元素。因此,其接口与 deque 容器类似,只提供了 push、pop、front 和 back 等操作。
  • priority_queue 是基于 vector 实现的堆容器适配器,支持自动排序和高效的插入、删除操作。堆排序的实现需要维护一个二叉堆,而 C++ STL 中提供了一个优先队列容器适配器,可以方便地实现优先队列功能。该容器适配器类似于队列,但是每次插入元素时会自动调整堆得顺序,使得队首元素始终是最大值(或最小值)。

组件

  • pair 是用来存储一对值的容器适配器,可以用来定义关联数组、映射表等数据结构。例如可以使用 pair 存储一个字符串和一个整数,一个日期和一个时间等。pair 可以使用 STL 中的算法和容器进行操作,例如 vector、map、set 等。
  • heap 是堆排序算法的一部分,它并不是一种容器或容器适配器。STL 中提供了 make_heap、push_heap 和 pop_heap 等函数,用于对容器中的元素进行堆排序。make_heap 函数将容器转换为堆,push_heap 函数在堆中插入新元素,pop_heap 函数删除堆顶元素并重新调整堆的结构。使用 heap 可以快速地对序列排序和查找最值等操作。

迭代器

  • 至少掌握 迭代器iterator 的用法

  • C++ STL迭代器

常用算法函数

  • 至少掌握常用算法函数,如
    增删改查元素、排序、比较、翻转、计数、排列组合
    数学函数(返回最大最小值、幂运算、求平方根、求绝对值、求对数、向上/下取整、四舍五入、生成伪随机数、_gcd) 等

  • C++常用STL (容器类 、容器适配器 、迭代器 和 算法)


其他

  • 关键字auto的用法
    可以和 STL 容器、算法、迭代器等紧密结合使用,可以方便地推导出容器中元素、算法返回值、迭代器指向的类型等信息。

  • 代码优化提速

//  比如c++

//  提高输出时换行效率
    #define endl '\n'
//	提高程序的输入输出效率
	ios_base::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);
  • C++常用函数、容器类 和 STL

  • 可以参考 OI-wiki 的 学习路线 和 学习资源


编程 | 学习

写代码时 多写注释

学习 | 练题 平台

不建议自己埋头学,最好还是跟着一些 算法课 来学(acwing or 牛客)
并且一定要勤加练习千万不要自以为看懂了就不去练题!!!

  • 牛客竞赛
    牛客竞赛,专业的竞技算法训练平台。
    ✨ 有很多题目及比赛题可以写,最重要的是可以 查看别人过题的代码 ,这个超级棒!!!

  • acwing
    有算法系列精品课程-AcWing算法全家桶,配备全面系统的知识讲解,配套题库的实战训练,专业在线的答疑辅导。
    ✨ 推荐 买课

  • 洛谷
    洛谷致力于为参加noip、noi、acm的选手提供清爽、快捷的编程体验。它拥有在线测题系统、强大的社区、在线学习功能。

  • codeforce
    计算机编程爱好者提供在线评测系统的俄罗斯网站。上面有很多cpc区赛题。
    强烈推荐 打cpc比赛的同学试试

  • oi-wiki
    免费开放且持续更新的 编程竞赛 知识整合站点。
    ✨ 很棒


编程笔记 | 题解

有条件的 强烈建议 多写些 编程笔记题解
可以参照别人的来写,多写 编程笔记题解 进行归纳总结,是可以提升自己的 编程思维 的。

可以写在CSDN或cnblog上(写在网上随时随地都可以查看)。
建议学习并使用 md格式 来写,真的很方便。
比如:C++常用函数、容器类 和 STL


比赛相关要点注意

赛前

做好充足的准备

  • 保证良好的身体状态、充足的睡眠和休息、尽量少喝水
  • 提前了解 比赛规则编译环境
  • 提前准备并妥善放置 身份证 、 学生证 、 准考证 、 笔 等物品。
  • 针对不同比赛,进行有针对性的刷题:
    蓝桥杯:暴力、优化 、 DFS等知识点 用的比较多。使用 蓝桥杯练习系统 进行练题。
    天梯赛:容器类、数学思想 、 数据结构等知识点 用的比较多。使用 PTA系统 进行练题。
    (ACM赛制)CPC类比赛: 容器类、数学思想、算法 、 数据结构 都有涉及。使用 acwing 、 洛谷 、 牛客 进行日常练题,使用 牛客竞赛 、 codeforce 练同类型比赛的题。
    ACM类算法竞赛 入门介绍

赛中

既然参加编程比赛,就一定要朝着解题更多,编码总用时更少的方向努力。一切都要为此让步,比如

  • 心态要稳,不要在一题上卡太久,继续往下写。
  • 参考别人的过题情况 来确定写题顺序。
  • 仔细阅读题目 ,避免读错题。
  • 赛前数月要 勤刷题 ,保证充足的编程手感。
  • 写题注意点:
    蓝桥杯/天梯赛:解不出题可以写出一些特殊情况的解进行 骗分
    (ACM赛制)CPC类比赛:因ACM赛制,不能进行骗分。谨慎且果断提交,尽量减少罚时 。看到 不懂的单词不要猜,直接查字典

赛后

  • 比赛完仍然要 归纳总结 ,上网看看 别人的思路和想法 ,有题目的话可以 重新写题 ,编写 编程笔记和题解 。比如:
    2023年第六届广西大学生程序设计竞赛(热身赛)题解
  • 可以写 比赛日记 ,记录比赛的经历、过程及心得,以后还可以回忆。比如:
    如何评价第六届广西大学生程序设计竞赛?
    gxcpc6 游记

资料分享

笔记题解

  • 牛客网编程笔记题解
  • CSDN编程笔记题解
  • acwing编程笔记题解

资料PDF(可打印)

  • oiwiki的pdf
    挑一些打印就行

  • y总基础课+提高课+进阶课模板.pdf


题目及题解PDF

  • codeforce-gym
    codeforce中有很多cpc题目和题解可以下载

  • 题目及题解PDF


贡献者

桂林学院 蓝桥杯、天梯赛、GXCPC 参赛队员

bilibili@回忆_少年

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

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

相关文章

JVM栈帧结构及动态链接

1. 栈帧结构 附加信息(此处官网未具体说明,可忽略,参考图中结构理解即可):栈帧的高度,虚拟机版本信息 栈帧信息:附加信息动态链接方法的返回地址 局部变量表:方法中定义的局部变量…

基于flask的web应用开发——登录界面

目录 0. 前言1. request2. redirect3. 动态路由4. Jinja2代码实现 0. 前言 打算在云服务器上部署一个 TODO LIST 来练手,也就是一个代办事项提醒表。 本节学习使用 flask 库制作出一个登录界面,并且使用Redis数据库实现账号密码加载功能,关…

微信小程序登录的最佳实践

微信小程序登录的最佳实践 官方文档的介绍 小程序可以通过微信官方提供的登录能力方便地获取微信提供的用户身份标识,快速建立小程序内的用户体系。 登录流程时序 说明 调用 wx.login() 获取 临时登录凭证code ,并回传到开发者服务器。 调用 auth.co…

图解C++对象模型

C对象模型是什么 《深度探索C对象模型》这本书中对对象模型的描述如下: 有两个概念可以解释C对象模型: 语言中直接支持面向对象程序设计的部分。 对于各种支持的底层实现机制。 语言中直接支持面向对象程序设计的部分,包括了构造函数、析构函…

chatgpt赋能python:Python如何快速复制上一行?

Python 如何快速复制上一行? 在编写Python代码时,经常需要快速复制上一行代码进行修改。如果只是简单的手动复制粘贴,会造成不必要的时间浪费并且容易出错。本文将介绍三种快速复制上一行代码的方法。 方法一:使用快捷键 在Pyt…

chatgpt赋能python:Python如何拟合曲线

Python如何拟合曲线 拟合曲线是数据分析中常见的一种方法。Python作为一种强大的编程语言,具有丰富的数据分析库和拟合曲线的功能。本文将介绍如何在Python中使用numpy、matplotlib和scipy库进行曲线拟合。 numpy库 numpy是Python中常用的数值计算库。它提供了许…

Error系列-CVE CIS-2023系统漏洞处理方案集合

问题1: CVE-2023-29491 Type: OS涉及到的包:ncurses-dev,ncurses-libs,ncurses-terminfo-base描述:当前系统安装的ncurses,存在漏洞,当被setuid应用程序使用时,允许本地用户通过在$HOME/中找到的终端数据库…

Spring Cloud Alibaba - Sentinel(二)

目录 一、Sentinel 熔断降级简介 1、基本介绍 2、熔断策略 3、熔断规则 二、Sentinel熔断策略 1、慢调用比例 2、异常比例 3、 异常数 三、热点规则 1、热点规则 2、参数例外项 四、系统规则 1、Sentinel 系统规则 一、Sentinel 熔断降级简介 1、基本介绍 除了流…

Linux 手动部署 SpringBoot 项目

Linux 手动部署 SpringBoot 项目 1. 将项目打包成 jar 包 &#xff08;1&#xff09;引入插件 <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></pl…

【Spring 项目的创建和使用】

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔&#x1f93a;&#x1f93a;&#x1f93a; 目录 1. 创建 Spring 项目 2. 创建一个 普通 Maven…

chatgpt赋能python:Python如何更新pip

Python 如何更新 pip 在 Python 编程中&#xff0c;pip 是一个非常重要的工具&#xff0c;它可以帮助我们安装和管理 Python 包。然而&#xff0c;我们有时候会遇到 pip 版本过低&#xff0c;需要进行更新的情况。那么&#xff0c;如何更新 pip 呢&#xff1f; 什么是 pip p…

论文笔记(三十):Counter-Hypothetical Particle Filters for Single Object Pose Tracking

Counter-Hypothetical Particle Filters for Single Object Pose Tracking 文章概括摘要1. 简介II. 相关工作A. 机器人的物体姿态估计和跟踪B. 鲁棒性的粒子滤波 III. 背景&#xff1a;粒子滤波A. 粒子滤波B. 粒子剥夺和粒子重振IV. 反假设粒子滤波A. 反假设重取样B. 6D姿势估计…

记一次为学校流浪猫开发的小程序——航海之猫

某次刷朋友圈时&#xff0c;看到校园墙上有一个校园流浪猫救助组织在召集爱心人士加入工作小组。其中需要会做微信小程序的给学校里的猫猫做一个猫猫图鉴&#xff0c;于是就有了本次项目经历。 相关技术及工具 工具&#xff1a;Uniapp、XBuilder、微信官方开发者工具技术&…

chatgpt赋能python:Python如何把文件复制到另一个目录下

Python如何把文件复制到另一个目录下 作为一个有着10年Python编程经验的工程师&#xff0c;我可以告诉你&#xff0c;在Python编程中&#xff0c;复制文件是非常常见的任务之一。无论您是为了备份数据或将文件从一个地方传输到另一个地方&#xff0c;都需要使用文件复制操作。…

Linux中/dev/null和/dev/zero的作用

1./dev/null和/dev/zero介绍 在Linux环境中&#xff0c;我们会经常用到/dev/null和/dev/zero&#xff0c;今天为大家讲讲/dev/null和/dev/zero的作用以及使用场景。 1.1./dev/null介绍 linux中/dev/null&#xff0c;它是一种特殊的虚拟设备&#xff0c;用于写入而不是读取&a…

前端050_单点登录SSO_登录功能实现

登录功能实现 1、登录认证流程2、定义 Api 调用登录接口3、Vuex 登录信息状态管理4、提交登录触发 action5、测试1、登录认证流程 单点登录认证流程图 门户客户端要求登录时,输入用户名密码,认证客户端提交数据给认证服务器认证服务器校验用户名密码是否合法,合法响应用户…

RISC-V学习基础(六)

原子指令 RV32A有两种类型的原子操作&#xff1a; 内存原子操作&#xff08;AMO&#xff09;加载保留/条件存储&#xff08;load reserved/store conditional&#xff09; 图6.1是RV32A扩展指令集的示意图&#xff1a; 图6.2列出了它们的操作码和指令格式 AMO&#xff08;at…

chatgpt赋能python:Python如何更新包

Python如何更新包 Python是当今最流行的编程语言之一&#xff0c;它通过其丰富的生态系统和充足的工具库为许多开发者提供了便捷、快速、高效的开发体验。在Python的世界里&#xff0c;包是一种最重要的组件之一&#xff0c;因为它们可以让你轻松地扩展Python的功能&#xff0…

【跨域】如何解决跨域问题

同源策略 同源 相同协议相同域名相同端口 内容 浏览器的同源策略 - Web 安全 | MDN (mozilla.org) 浏览器页面向不同源的服务器发送ajax请求资源时&#xff0c;响应的数据会被浏览器拦截 意义 出于安全性的考虑&#xff0c;防止恶意获取数据 解决方案 JSONP 不使用aj…