算法分享三个方面学习方法(做题经验,代码编写经验,比赛经验)

2023-09-18 19:48:01

目录

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 分钟略微细致的分析加想一下。

基本上不难的题目都可以做出,就算做不出也会有“这题不是很难”的感觉,并且标上目前这题你能得出来的概率。

那么根据之前对题目的了解,就可以决定做题的顺序了。

更多推荐

AJAX学习

文章目录创建XMLHttpRequest对象向服务器发送请求XMLHttpRequest.open()XMLHttpRequest.send()GET或POST服务器响应XMLHttpRequest的属性XMLHttpRequest.readyStateXMLHttpRequest.onreadystatechange

Linux 下 Mysql 的安装与卸载

文章目录Mysql安装安装服务安装客户端设置远程连接进入mysql使用mysql库查看用户表更新用户表强制刷新权限重启mysql服务其他设置mysql的字符编码找到[mysqld_safe],在底下添加红色标记的字符添加server编码在底下添加红色标记的字符找到[mysql]在底下添加红色标记的字符重启服务即可Mys

五、回溯(trackback)

文章目录一、算法定义二、经典例题(一)排列1.[46.全排列](https://leetcode.cn/problems/permutations/description/)(1)思路(2)代码(3)复杂度分析2.[LCR083.全排列](https://leetcode.cn/problems/VvJkup/desc

7.2.4 【MySQL】匹配范围值

回头看我们idx_name_birthday_phone_number索引的B+树示意图,所有记录都是按照索引列的值从小到大的顺序排好序的,所以这极大的方便我们查找索引列的值在某个范围内的记录。比方说下边这个查询语句:SELECT*FROMperson_infoWHEREname>'Asa'ANDname<'Barlo

科技云报道:云安全的新战场上,如何打破“云威胁”的阴霾?

科技云报道原创。近年来,在云计算和网络安全产业的蓬勃发展下,我国云安全行业市场规模呈现高速增长态势,在网络安全市场总体规模中占比不断上升。据统计,近5年我国云安全市场保持高速增长,2021年我国云安全市场规模达到了117.7亿元,2022年行业整体规模达到173.3亿元,2023年市场规模将达到330亿元人民币,由此可

服务网格和性能优化:介绍如何通过服务网格提高微服务架构的性能和可扩展性

🌷🍁博主猫头虎带您GotoNewWorld.✨🍁🦄博客首页——猫头虎的博客🎐🐳《面试题大全专栏》文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺🌊《IDEA开发秘籍专栏》学会IDEA常用操作,工作效率翻倍~💐🌊《100天精通Golang(基础入门篇)》学会Golang语言,畅玩云原生,走遍大

Vue-cli搭建SPA项目

前言VueCLI(VueCommandLineInterface)是一个用于快速搭建基于Vue.js的前端项目的工具。它是Vue.js官方提供的一个脚手架工具,旨在简化Vue.js项目的开发过程。VueCLI提供了一些强大的功能,帮助开发者轻松创建、开发和构建Vue.js应用程序VueCLI的主要特点和功能:快速创建项

如何设置代理ip服务器地址

在今天的互联网环境中,代理服务器在保护个人隐私和规避网络限制方面扮演着重要的角色。设置代理服务器地址的方式主要取决于你使用的具体软件或编程语言。在本文中,我们将分别介绍如何在Python和Java中使用HTTP代理服务器、SOCKS代理服务器以及代理池。一、使用HTTP代理服务器1、Python中设置HTTP代理在Py

Linux:GlusterFS 集群

GlusterFS介绍1)Glusterfs是一个开源的分布式文件系统,是Scale存储的核心,能够处理千数量级的客户端.在传统的解决方案中Glusterfs能够灵活的结合物理的,虚拟的和云资源去体现高可用和企业级的性能存储.2)Glusterfs通过TCP/IP或InfiniBandRDMA网络链接将客户端的存储资块

[deeplearning]pytorch实现softmax多分类问题预测训练

写在前面:俺这两天也是刚刚加入实验室,因为之前的学习过程中用到更多的框架是tensorflow,所以突然上手pytorch多少有些力不从心了。这两个框架的主要区别在与tensorflow更偏向于工业使用,所以里面的很多函数和类都已经封装得很完整了,直接调用,甚至连w,b等尺寸都会自动调整。但是pytorch更加偏向于学

libevent 定制——libevent 定制多线程

libevent定制多线程文章目录libevent定制多线程开启多线程定制多线程调试锁的使用编写多线程程序的时候,在多个线程中同时访问同样的数据并不总是安全的。libevent的结构体在多线程下通常有三种工作方式:某些结构体内在地是单线程的:同时在多个线程中使用它们总是不安全的。某些结构体具有可选的锁:可以告知libe

热文推荐