算法分享三个方面学习方法(做题经验,代码编写经验,比赛经验)
目录
0 . 前言:(遇到OI不要慌)(只要道路对了,就不怕遥远)
1. 做题经验谈
1.1 做题的目的
1.2 我对于算法比赛的题目的看法
1.2.1 类似题
1.2.2 套模型:
1.3 在训练过程中如何做题
1.4 一些建议:提高算法能力
1.5 一些建议:提高代码能力
1.6 选一个好的 OJ
1.7 分析问题的方法:我的一些经验
2. 代码编写经验谈
2.1 你 50% 的代码时间基本都浪费在调试上
2.2 模块化
2.3 有意义的变量名
2.4常见的代码错误
2.4.1 变量名打错
2.4. 2 不完全的修改
3. 比赛经验谈
3.1 对签到题要格外小心
3.2 考场策略问题
3.3 心态
3.4 实力
3.5 策略
3.6 对于比赛经验的一些总结
3.7 注意事项
3.8 比赛方法
3.8 .1 比赛方法 1 : 简单题
3.8.2 比赛方法 2 :困难题
0 . 前言:(遇到OI不要慌)(只要道路对了,就不怕遥远)
从大学0基础小白,基于刷了不完全统计大约2500道不同难度的题,到全球最强算法平台codeforces ,账号评分2347,全球排名约前1000,中国排名前200左右。
分享一下我在学习算法这几年,总结的一点心得。
题是刷不完的,掌握学习方法,才是王道。
我分别从三个方面进行讲解:
做题经验谈,代码编写经验谈,比赛经验。
1. 做题经验谈
1.1 做题的目的
做题的目的是学到新的东西以及锻炼代码能力,而不是盲目刷 OJ 的 rank,那没有任何意义。
提高算法能力(想出做法的能力,分析问题的方法等等)
提高代码能力(写出正确的代码的能力)
提高调试能力(将错误的代码改对的能力)
1.2 我对于算法比赛的题目的看法
1.2.1 类似题
对于大部分算法竞赛题目来说
大部分由于做过类似的,不用想就能解决。
之后的大部分顺着题目进行一些简单的分析,就也能转化成做过的问题。
1.2.2 套模型:
学习更多的解题模型,可能具体也可能抽象,要多加思考。
1.3 在训练过程中如何做题
选择一个好的 OJ/CF <- 优秀的题目来源
适度而不过量的思考 <- 节约时间
如果做不出来,在看了题解之后,总结自己做不出来的原因是什么,以完善
自己今后的做题方法。
做题方法是一个很抽象的概念,需要经验的积累 ( 和一定的智商? )
1.4 一些建议:提高算法能力
CF2100分的左右题目经常会有令人耳目一新的算法思路。注重解题的过程而不是罗列解法,当然由于难度较大自己做可能比较累。
而且刚刚接触的时候基本上是做不出来的吧大概 <_< 。
所以推荐的方法是看看题目不要想太多不会做就看题解。
就算自己做出来了也可以看一下题解的分析,这对提高算法能力非常有好处。
1.5 一些建议:提高代码能力
代码能力很大程度上取决于经验,你可能觉得这种可能需要大量的练习,但是其实也是有捷径的,那就是参考别人的代码。
最佳的方法是找一些可能比较难写的题目,自己很可能写不出来,这时可以参考别人的代码,搞明白那些细节都是怎么处理的,优秀的代码风格能够极大的提高代码能力。
如果是在 CF 上刷题,可以经常参考每次比赛排行榜前10的前辈的代码学习一下,他们的代码风格都很好。
1.6 选一个好的 OJ
CF 的好处:有别人代码可以参考学习,有官方题解可以看。
同时可以参考很多前辈的代码和解题报告。
1.7 分析问题的方法:我的一些经验
1. 从简单的情况开始分析:经典方法,对原题没有思路,那么分析问题的简化版。
经典例子:找出字典序最小的解,那么我们先分析怎么找出一个解。
2. 人的思维很大程度上跟关键字有关系,比如一个题目怎么想都不会,有人跟你说“容斥”,你可能瞬间就会做了,不妨列出对于这类问题已知的一些解决方法关键字,思考思考能否做。
2. 代码编写经验谈
2.1 你 50% 的代码时间基本都浪费在调试上
90% 的错误都是傻逼错误。
正确的写代码方式。
2.2 模块化
功能直接使用各自的模块。
2.3 有意义的变量名
单词的 3 个缩写
Number->num amount ->amt ,count -> cnt
2.4常见的代码错误
2.4.1 变量名打错
写代码的时候集中注意力
变量名要有意义。
2.4. 2 不完全的修改
复制粘贴一段代码的时候,急于求成,没有根据上下文改对。
复制粘贴的时候尽量注意,或者不复制粘贴使用独立的函数。
发现一个地方要改一下,这个地方可能影响很多其它的地方,没有考虑全,导致错误。
突然发现要改一个地方的时候,好好想想这里会影响哪里。
3. 比赛经验谈
3.1 对签到题要格外小心
注意细节
3.2 考场策略问题
不够冷静
3.3 心态
正确的做题顺序
正确的比赛策略
最后是以上两点导致的优秀的心态。
3.4 实力
实力碾压
3.5 策略
正确的比赛策略,没有在坑爹题上浪费太多时间,并且 AC 了一道稍有难度
的题目,之后全力确保一道很容易错的题目,并成功 AC 。
3.6 对于比赛经验的一些总结
1. 良好的心态是必须的,不冷静只会让自己水平暴跌。
2. 首先把题目都认真的看一遍,绝对不要看错题目,保险起见可以使用看两
遍的方法,确保题意是对的,不要放过任何可能重要的条件,可能只写在数
据范围里!
3. 对每一题,都使用自己平常的方法做一做,而不是看到会的就立刻去写。
这个时间每题不要过长。
4. 在此基础上决定一个良好的做题顺序。
3.7 注意事项
1. 绝对绝对绝对不要看错题目或者输入输出的格式。
2. 签到题你没 AC 别人满分你就完蛋了,绝对不要错签到题。
3. 对于可以对拍的题,一定一定一定要对拍。
4. 千万不要成为错误 ( 没删调试语句,文件名打错 )list 上的主人公。
3.8 比赛方法
3.8 .1 比赛方法 1 : 简单题
特点:题目简单,数据也弱。
面对简单题,我们需要的是稳定的 AC 。
不要求速度,先认真的看完题目,然后从容解决签到题。
然后一般来说会有一道不是那么简单的题目,先确保其它的简单题没有
问题,简单的题目往往可以简单的对拍,不需要花多少时间。
然后把时间都花在略难题上,争取得到自己能得的最高分。
注意使用特判法,不能确保做法正确性的时候最稳妥的做法是特判。
暴力的范围然后暴力范围用暴力。
3.8.2 比赛方法 2 :困难题
特点:题目有一定难度,无法全部做出。
易犯错误:考场看都没看,放过了本来应该是非常简单的题目。
在这种比赛中,正确的做题顺序非常重要,但是做题顺序来源于对题目的了解,
而对题目的了解又需要花费你的时间,这两个方面各自牵制,并非独立。
我个人的做法是首先要抽出半小时看完所有题目并且随便想一想,然后对每题都
可以标出使用你第一眼想到的做法。
然后再每题花 10 分钟略微细致的分析加想一下。
基本上不难的题目都可以做出,就算做不出也会有“这题不是很难”的感觉,并且标上目前这题你能得出来的概率。
那么根据之前对题目的了解,就可以决定做题的顺序了。
相关文章:
算法分享三个方面学习方法(做题经验,代码编写经验,比赛经验)
目录 0 . 前言:(遇到OI不要慌)(只要道路对了,就不怕遥远) 1. 做题经验谈 1.1 做题的目的 1.2 我对于算法比赛的题目的看法 1.2.1 类似题 1.2.2 套模型: 1.3 在训练过程中如何做题 1.4 一些建议&…...
爬虫 — 验证码反爬
目录 一、超级鹰二、图片验证模拟登录1、页面分析1.1、模拟用户正常登录流程1.2、识别图片里面的文字 2、代码实现 三、滑块模拟登录1、页面分析2、代码实现(通过对比像素获取缺口位置) 四、openCV1、简介2、代码3、案例 五、selenium 反爬六、百度智能云…...
视频图像处理算法opencv模块硬件设计图像颜色识别模块
1、Opencv简介 OpenCV是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上 它轻量级而且高效——由一系列 C 函数和少量 C 类构成,同时提供了Python、Rub…...
目标检测网络之Fast-RCNN
文章目录 Fast RCNN解决的问题Fast RCNN网络结构RoI pooling layer合并损失函数及其传播统一的损失函数损失函数的反向传播过程Fast RCNN的训练方法样本选择方法SGD参数设置多尺度图像训练SVD压缩全连接层对比实验对比实验使用到的网络结构VOC2010和VOC2012数据集结果VOC2007数…...
Golang Gorm 创建HOOK
创建的时候,在插入数据之前,想要做一些事情。钩子函数比较简单,就是实现before create的一个方法。 package mainimport ("gorm.io/driver/mysql""gorm.io/gorm" )type Student struct {ID int64Name string gorm:&q…...
计算机视觉的应用15-图片旋转验证码的角度计算模型的应用,解决旋转图片矫正问题
大家好,我是微学AI,今天给大家介绍一下计算机视觉的应用15-图片旋转验证码的角度计算模型的应用,解决旋转图片矫正问题,在CV领域,图片旋转验证码的角度计算模型被广泛应用于解决旋转图片矫正问题,有效解决机…...
【Seata】分布式事务问题和理论基础
目录 1.分布式事务问题 1.1本地事务 1.2分布式事务 2.理论基础 2.1CAP定理 2.1.1一致性 2.1.2可用性 2.1.3分区容错 2.1.4矛盾 2.2BASE理论 2.3解决分布式事务的思路 1.分布式事务问题 1.1本地事务 本地事务,也就是传统的单机事务。在传统数据库事务中…...
文件打包解包的方法
在很多情况下,软件需要隐藏一些图片,防止用户对其更改,替换。例如腾讯QQ里面的资源图片,哪怕你用Everything去搜索也搜索不到,那是因为腾讯QQ对这些资源图片进行了打包,当软件运行的时候解包获取资源图片。…...
npm 清缓存(重新安装node-modules)
安装node依赖包的会出现失败的情况,如下图所示: 此时 提示有些依赖树有冲突,根据提示 “ this command with --force or --legacy-peer-deps” 执行命令即可。 具体步骤如下: 1、先删除本地node-modules包 2、删掉page-loacl…...
sqlserver查询表中所有字段信息
精简 SELECT 字段名 a.name,主键 case when exists(SELECT 1 FROM sysobjects where xtypePK and parent_obja.id and name in (SELECT name FROM sysindexes WHERE indid in( SELECT indid FROM sysindexkeys WHERE id a.id AND colida.colid))) then √ else …...
二叉树的概念、存储及遍历
一、二叉树的概念 1、二叉树的定义 二叉树( binary tree)是 n 个结点的有限集合,该集合或为空集(空二叉树),或由一个根结点与两棵互不相交的,称为根结点的左子树、右子树的二叉树构成。 二叉树的…...
【面试题】智力题
文章目录 腾讯1000瓶毒药里面只有1瓶是有毒的,问需要多少只老鼠才能在24小时后试出那瓶有毒。有两根不规则的绳子,两根绳子从头烧到尾均需要一个小时,现在有一个45分钟的比赛,裁判员忘记带计时器,你能否通过烧绳子的方…...
【SpringBoot集成Redis + Session持久化存储到Redis】
目录 SpringBoot集成Redis 1.添加 redis 依赖 2.配置 redis 3.手动操作 redis Session持久化存储到Redis 1.添加依赖 2.修改redis配置 3.存储和读取String类型的代码 4.存储和读取对象类型的代码 5.序列化细节 SpringBoot集成Redis 1.添加 redis 依赖 …...
day49:QT day2,信号与槽、对话框
一、完善登录框 点击登录按钮后,判断账号(admin)和密码(123456)是否一致,如果匹配失败,则弹出错误对话框,文本内容“账号密码不匹配,是否重新登录”,给定两个…...
Meta分析核心技术
Meta分析是针对某一科研问题,根据明确的搜索策略、选择筛选文献标准、采用严格的评价方法,对来源不同的研究成果进行收集、合并及定量统计分析的方法,最早出现于“循证医学”,现已广泛应用于农林生态,资源环境等方面。…...
Gof23设计模式之责任链模式
1.概述 责任链模式又名职责链模式,为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止…...
数字孪生和元宇宙:打造未来的数字边界
数字孪生和元宇宙是近两年来被热议的两个概念,但由于技术的交叉两者也极易被混淆。本文希望带大家深入探讨一下这两者之间的关系,以及它们如何一起构建了数字时代的新格局。 1. 数字孪生的本质 数字孪生是一种虚拟模型,它通过数字手段对现实…...
【新版】系统架构设计师 - 软件架构设计<新版>
个人总结,仅供参考,欢迎加好友一起讨论 文章目录 架构 - 软件架构设计<新版>考点摘要概念架构的 4 1 视图架构描述语言ADL基于架构的软件开发方法ABSDABSD的开发模型ABSDMABSD(ABSDM模型)的开发过程 软件架…...
Linux面试题
当准备 Linux 面试时,以下是一些可能会遇到的常见 Linux 面试题: 1. 什么是Linux?解释一下Linux操作系统的特点。 2. 什么是Linux内核?Linux内核的作用是什么? 3. 如何在Linux系统上查看当前的IP地址和子网掩码&#…...
NODEJS版本管理工具
一、使用NVM 下载 Linux下载 curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh widows下载地址 https://github.com/coreybutler/nvm-windows/releases 安装Node.js版本: nvm install 14.16.0 切换Node.js版本: nvm use …...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...
【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...
华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
PostgreSQL——环境搭建
一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在࿰…...
MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)
macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 🍺 最新版brew安装慢到怀疑人生?别怕,教你轻松起飞! 最近Homebrew更新至最新版,每次执行 brew 命令时都会自动从官方地址 https://formulae.…...
