ACM金牌学长,算法竞赛经验分享

2023-11-03

大家好,我是编程熊。

不少读者问我: 本科打算法竞赛,你如何训练的呀?有什么经验么?

于是小熊写一篇ACM算法竞赛入门和进阶指南,分享一下经验和学习方法。

也许你可能不参加算法竞赛,但知道厉害的人如何学习、训练、一步步变强,也是可以借鉴和学习的。

如果有一天你根据这个指南训练,拿了大厂offer、ACM奖牌,记得和小熊来说一声,哈哈。

文章目录如下,将从以下八个方面展开,接下来进入正文。

7b09d62c480c5bc01ae774d8bc7a5d52.png

一、ACM竞赛

ACM程序设计竞赛是三人组队赛,一场比赛5个小时,通常有10~13个问题,三人合力解决,比赛时三人只能使用一台电脑。

每年有多个赛站,但每人一年只能参加两场区域赛(不算邀请赛、省赛)。

e1cb16064c0f3ded179013ee2f1613cb.png

二、入门方式

主要从学习路径,即学习内容的先后顺序,进行介绍,后面会有学习资料推荐。

1)C语言的基本语法

2)简单语法题

3)基本算法和数据结构

4)进阶的算法以及复杂数据结构

5)....

由于本文主要是概括性的,详细的入门方式,如果大家需要(文末点赞和在看数量多的话),也会单出一篇文章分享。

三、书籍推荐

1、《挑战程序设计竞赛 第2版》

作者巫泽俊,是ACM-ICPC世界总决赛冠军。

个人感觉比下面的《算法竞赛入门经典-第2版》好入门一点,可能是因为图解多一点吧。

2、《算法竞赛入门经典-第2版》

竞赛选手常称,紫书。

我认识的竞赛选手大多都看过紫书,很多厉害的选手,刷了很多上面的习题。

3、《算法竞赛入门经典-训练指南》

配合紫书食用,里面很多UVA的题目,有的题目比较难。

四、算法博客

OI Wiki

f91b865d7f59c17ca4fd7bdd632156df.png

OI Wiki 致力于成为一个免费开放且持续更新的 编程竞赛 (competitive programming) 知识整合站点,大家可以在这里获取与竞赛相关的、有趣又实用的知识。我们为大家准备了竞赛中的基础知识、常见题型、解题思路以及常用工具等内容,帮助大家更快速深入地学习编程竞赛中涉及到的知识。(来源于: OI Wiki)

五、刷题网站

1、Codeforces

世界上最大的刷题网站,每隔几天就会有一场比赛,参加人数非常多。

有两个场 div1 和 div2,div1 比 div2难。

一般比赛时间对国内选手不太友好,如果不能实时参加,也可以VP模拟。

同时因为每周都有几场比赛,网站积攒了大量的题目,也是一个巨大的题库。

cf 的 rating 系统可以作为训练、刷题效果的一个测试参考,但和考试一样,某一次的考试结果可能不太有参考意义。

来自某算法竞赛狂热爱好者的补充。

刚开始入门的时候我觉得我是一个人在沙漠里走,手里虽然拿着地图,但身边 缺乏参照物。 接触到 cf 以后,看着自己涨涨跌跌跌跌的 rating,看着五颜六色的国旗感觉还挺有游戏体验的。

2、HDU/POJ/ZOJ

学校的OJ,我大一入学的时候刷的是杭电11页里面的100题,练习的C++语法。

HDU和POJ、ZOJ一样里面也有大量的经典题。

3、Atcoder

日本的刷题网站,平常也有比赛,但频率没有Codeforces高,里面题目质量也很高。

4、Virtual Judge

这个网站是一个OJ网站合集,大家可以在VJ做其他OJ的题目,并提交。

六、团队分工

1、基础的算法与数据结构知识点

三个人都要会。

比如常见的,递归、二分、哈希、深度优先搜索、广度优先搜索、贪心、KMP、字典树、基础动态规划、基础数论等等。

基础的算法与数据结构知识点,三个人都会的话,这样可以在比赛中,谁看到了这种题都可以去写,不用耽误时间给其他队友讲解题意。

2、高阶的知识点

可以进行分工。三个人根据兴趣和擅长点,选择一部分进行攻坚,进行深入的学习。

比如:AC自动机、复杂的dp(如插头dp)、网络流、复杂数论...

我的个人建议是,一个高阶难的知识点,一个队伍至少有两个人掌握,这样比赛的时候,可以互相提供思路、帮忙debug。

七、组队训练

1、题目选择

可以选取以往的区域赛题目,在 Codeforces 的 GYM 中有很多国内和其他地区的区域赛题目。

下面提供如何选择一套题的方法,仅供参考。

找到一场比赛,在 common standing 中看看有没有国内的厉害的队伍 vp 过,可以作为选取的因素之一。

8ef46c7ee46e9d363fd2b31bed34a3ee.png
2、训练频率

不同水平队伍的不太一样。

目标是金牌的队伍,建议每周3~4次,考试周前除外。

大家可以根据队员时间合理安排。

3、赛前加练

赛前找一套题,三个人像比赛一样,用一台电脑训练。

题目不用找太难的,太难的会搞队伍心态。

目的是保持竞技状态。

4、赛后总结

赛后一定要总结,训练赛的目的发现问题。

问题包括但不限于:

  • 知识点

  • 做对的题,解决是不是最优的。

  • 做错的题,什么case没考虑到,还是解决有问题,...

  • 不会做的题,是所用的知识点没学过,还是没想到,...

  • 团队合作

  • 开题策略

  • 合理「换线」

  • 心态管理

5、赛后补题

赛后要将 做错的题、不会做的题,力所能及地进行补题。

对于不会做的题,努力走出舒适圈,去补题做那种稍微有点思路,但是没做出来的题。

三个人可以商量,分别补哪些题,合理分工。

最后可以将题解汇总到一个地方,可以复习,队伍其他人也可以学习一下。

PS: 之前有 ICPCCamp Wiki 大家可以参考强队的训练,赛后总结、题解、赛后补题。现在已经没了。

八、比赛策略

1、前中期

尽量保证每道题都有人读过题,最好每道题有2个人知道题意。

基本上跟住榜就行了。

那种榜上零零散散有队伍过的题目,可以尝试非常规思路。

2、封榜之后

封榜之后,如果卡着2-3题,必须做出取舍,最多保留2题,最好1题。

封榜之后一切以求稳为第一要义。(适用于绝大多数金银铜队伍)

3、无题可做的局面

如果目前没有一道题会做,可以考虑2+1的模式,一个人逐个浏览题目,看看有没有有思路的。另外两个人集中讨论思考同一道题。

4、因地制宜

重要的是,根据自己队伍的情况,总结一些规律和经验,就是什么样的策略比较适合自己队伍的情况。

比如。

  • 自己队伍哪些知识点比较强,可以考虑优先做对应的题目。

  • 每个人擅长什么题。

  • 什么样的题适合放到前期、什么样的题适合放到后期。

5、什么样的情况下是策略有问题

当一个队伍感觉每场比赛 要是再多一个小时,自己就能多出1-2题的时候,就有可能是比赛策略有问题。

如果要是感觉自己再多一个小时,还是一样的结果,那就不是策略的问题。

最后,一切的比赛策略要建立在实力的基础上,实力不足,谈策略没有任何意义。

希望我们知足上进不负野心,各自努力顶峰相见。

鼓励一下小熊吧↓↓↓

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ACM金牌学长,算法竞赛经验分享 的相关文章

  • java try catch 程序流程什么时候中断?

    你好 我对 Java 中的异常处理不太熟悉 所以 正如主题在基本 try catch 块中所述 当我在 Try 块中捕获异常时 程序流程何时中断 try some code that raises an Exception catch Ex
  • 我可以确定谁在调用 Java 中的函数或实例化类吗? [复制]

    这个问题在这里已经有答案了 可能的重复 在Java中 如何使用堆栈跟踪或反射找到方法的调用者 https stackoverflow com questions 421280 in java how do i find the caller
  • Java 字符串哈希码缓存

    字符串不变性的优点之一是哈希码缓存以实现更快的访问 在这种情况下 如何处理具有相同哈希码的字符串的缓存 在这种情况下它真的能提高性能吗 在这种情况下 如何处理具有相同哈希码的字符串的缓存 被缓存的是字符串的哈希码 它被缓存在私有的int字符
  • Java中RandomAccessFile的并发

    我正在创建一个RandomAccessFile对象通过多个线程写入文件 在 SSD 上 每个线程都尝试在文件中的特定位置写入直接字节缓冲区 并且我确保线程写入的位置不会与另一个线程重叠 file getChannel write buffe
  • 如何实现具有LinkedHashMap类似功能的ConcurrentHashMap?

    我用过LinkedHashMap with accessOrdertrue 并同时允许最多 500 个条目作为数据的 LRU 缓存 但由于可扩展性问题 我想转向一些线程安全的替代方案 ConcurrentHashMap在这方面似乎不错 但缺
  • 使用正则表达式验证输入字符串是否为 0-255 之间的数字

    我在将输入字符串与正则表达式匹配时遇到问题 我想验证输入数字在 0 255 之间并且长度最多应为 3 个字符 代码工作正常 但当我输入 000000 至任意长度时 显示 true 而不是 false 这是我的代码 String IP 000
  • Java 流 - 按嵌套列表分组(按第二顺序列出)

    我有以下数据结构 每个学生都有一个州列表 每个州都有一个城市列表 public class Student private int id private String name private List
  • 帮助我避免 JPA、Hibernate 和 MySQL 的连接超时

    我正在使用 JPA Hibernate 作为提供者 Glassfish 和 MySQL 开发中一切都运行良好 但是当我将应用程序部署到测试服务器并让它运行 大部分空闲 过夜时 我通常会在早上遇到这样的情况 2011 03 09T15 06
  • Active MQ - HelloWorld 示例异常

    我正在尝试运行 hello world 示例在这里找到 http activemq apache org hello world html I added activemq all 5 5 1 jar已经到图书馆了 它构建成功 但出现以下警
  • 如何为java注释处理器编写自动化单元测试?

    我正在尝试使用 java 注释处理器 我可以使用 JavaCompiler 编写集成测试 事实上我现在正在使用 hickory 我可以运行编译过程并分析输出 问题 即使我的注释处理器中没有任何代码 单个测试也会运行大约半秒 对于以 TDD
  • AffineTransform.rotate() - 如何同时缩放、旋转和缩放?

    我有以下代码 它可以完成我想要绘制一个上面有一些棋子的棋盘的 第一部分 Image pieceImage getImage currentPiece int pieceHeight pieceImage getHeight null dou
  • c和java语言中的换行符

    现在行分隔符取决于系统 但在 C 程序中我使用 n 作为行分隔符 无论我在 Windows 还是 Linux 中运行它都可以正常工作 为什么 在java中 我们必须使用 n 因为它与系统相关 那么为什么我们在c中使用 n 作为新行 而不管我
  • 我需要一个字数统计程序[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我需要弄清
  • 如何导入 Java 密钥库中现有的 X.509 证书和私钥以在 SSL 中使用?

    我在 ActiveMQ 配置中有这个
  • Java 中的 MP4 容器编写器

    我想找到一个免费的 Java MP4 容器 编写器 我不需要编码器 只需要能够根据预期值写入正确原子的编码器 Bonus对于这样一个库 也可以编写 有效 F4V 我更喜欢纯 Java 解决方案 而不是使用 JNI 或外部可执行文件的解决方案
  • Java字符串查找和替换的最佳方法?

    我正在寻找 Java 中字符串查找和替换的最佳方法 这是一句话 我的名字叫米兰 人们都知道我叫米兰瓦西奇 我想用 Milan Vasic 替换 Milan 弦 但在我已经有 Milan Vasic 的地方 情况不应该是这样 搜索 替换后的结
  • 获取包中声明的所有 Java 类的名称

    我正在编写一个功能 它将有助于将类放入我的程序的某个包中 另外 我只想要子类某个类的类 我需要这些类才能调用它们的静态方法 有没有一种自动的方法来做到这一点 如果是的话 速度慢吗 如果我不清楚 我想要的是这样的 ArrayList
  • 如何列出hadoop hdfs中目录及其子目录中的所有文件

    我在 hdfs 中有一个文件夹 其中有两个子文件夹 每个子文件夹大约有 30 个子文件夹 最后 每个子文件夹都包含 xml 文件 我想列出所有 xml 文件 仅给出主文件夹的路径 在本地我可以这样做apache commons io 的 h
  • Spring Transactional 减慢了整个过程

    我正在尝试分析我有两堂课的情况 其中一个类是 ProcessImpl 它是起点并在内部调用其他子事务 我不知道出了什么问题 processImpl正在导入一些东西并将相关数据写入数据库 Specs Spring orm版本 3 2 18 发
  • Lucene/Hibernate 搜索锁定异常

    我使用 Hibernate Search 在 Web 应用程序上索引和全文搜索项目 没有问题 来自我的 pom xml

随机推荐

  • list容器

    1 list容器简介 链表是以中物理存储单元上的非连续 非顺序的存储结构 数据元素的逻辑顺序都是通过链表中的指针连接次序实现的 链表由一系列的结点 链表中每一个元素被称为结点 组成 结点可以在运行时动态生成 每一个结点包括两部分组成 一部分
  • PLSQL Developer连接数据库报错ora-12514解决

    PLSQL Developer连接数据库报错ora 12514解决 就这个错误纠结了好几天了 现在已经完美解决 现在把具体解决思路及方法记录下来 希望能够帮助更多像我这样纠结的人 高手大神们跳过 不多说废话 开始 外链图片转存失败 源站可能
  • 什么是CDN?CDN的原理和作用是什么?

    一 什么是CDN CDN全称Content Delivery Network 即内容分发网络 CDN是Content Delivery Network 内容分发网络 的缩写 是一种利用分布式节点技术 在全球部署服务器 即时地将网站 应用 视
  • 关系数据库

    关系 关系 描述实现事物的一张二维表 外码 关系A中的一组非主属性 其与关系B的主属性对应 则称关系A这组属性为A的外码 关系A为参照关系 关系B为被参照关系 关系完整性 实体完整性 主属性不能取空值 主属性应具有唯一区分性 参照完整性 外
  • 区块链入门系列之共识算法

    区块链入门系列文章 区块链基本概念和名词解释 P2P 共识算法 梅克尔 帕特里夏树 从零开始搭建区块链 这里写自定义目录标题 区块链入门系列文章 前言 POW POS PBFT Raft 其他共识算法 前言 前文已经说过 区块链从本质上来说
  • task1

    Task1 伯努利模型 P X 1 p P X 0 1 p 三要素 1 极大似然估计 模型 伯努利模型 策略 经验风险最小化 极大似然估计 等价于当模型是条件概率分布 损失函数是对数损失函数时的经验风险最小化 算法 极大化似然 P X p
  • MySQL的存储过程

    存储过程是组为了完成特定功能的SQL语句集合 存储过程在使用过程中是将常用或者复杂的工作预先使用SQL语句写好并用一个指定的名称存储起来 这个过程经编译和优化后存储在数据库服务器中 当需要使用该存储过程时 只需要调用它即可 存储过程在执行上
  • linux多节点zookeeper(不限于zookeeper)批量调起(举例,问题排查)

    小脚本 废话不多说直接来 bin bash flag 1 DfsOrAll 2 启动zookeeper 这里 hadoop01 hadoop02 hadoop03 都是节点别名 取代ip地址 可在 etc hosts配置 for i in
  • 翻转的卡片

    前言 第二篇 CodingStartup起码课 的视频练习 这几天都在看他的视频 然后跟着做出效果来 HTML CSS 制作翻牌效果 效果图 要点 使用 position 设置 2 个卡片重叠 正为 正面 反为 背面 transform r
  • pandas统计分析(下)——数据格式化、分组统计

    数据格式化 在数据处理以后需要对数据进行格式化 以增加数据的可读性 设置小数位数 主要使用round函数实现四舍五入 decimals参数用于设置保留小数的位数 round decimals 0 args kwargs decimals 每
  • android对webkit做了哪些封装,lAndroidwebkit简介及开发遇到的一些问题.doc

    lAndroidwebkit简介及开发遇到的一些问题 Android webkit简介 张立鹏 M厂开发五部目录 1 webkit架构2 2 Application3 2 1 WebViewClient里面几个重要方法3 2 2 WebCh
  • sql net message from client

    sql net message from client 2011 05 09 15 18 17 分类 等待事件 标签 字号大中小 订阅 sql net message from client大部分情况下对于数据库来说是空闲等待事件 表示数据
  • [Gradle中文教程系列]-跟我学Gradle-5.3:依赖-管理依赖的版本(传递(transitive)\排除(exclude)\强制(force)\动态版本(+))

    http blog csdn net pkaq article details 53906668
  • 抓包查看http + json 中的 json信息

    一 抓包查看 抓包中过滤http报文 因为json信息在http response中 点击 http 1 1 200 OK 报文 查看这个报文中的 http gt hypertext transfer protocol gt line ba
  • AndroidStudio编译调试aosp11R 的Launcher3

    1 下载aosp并编译 2 下载Launcher3 可以直接使用aosp中的 也可以使用git单独下载 git clone https android review googlesource com platform packages ap
  • 模式分类识别

    模式分类识别 BP神经网络多特征分类预测 Matlab完整程序 目录 模式分类识别 BP神经网络多特征分类预测 Matlab完整程序 分类结果 基本介绍 程序设计 参考资料 分类结果 基本介绍
  • Linux中的用户登录和管理指令

    关机 重启指令 shutdown h now 立刻进行关机 shutdown h 1 1分钟之后自动关机 同时该指令和shutdown 作用一致 shutdown r now 现在重新启动计算机 r代表reboot halt 立即关机 re
  • js怎么实现数组里的数据相加_JS怎么对数组内元素进行求和

    JS数组内元素求和 我们可以使用reduce 方法查找或计算数字数组的总和 该reduce 方法对数组的每个成员执行指定的reducer函数 从而生成单个输出值 下面我们就结合具体的代码示例 给大家介绍JS数组内元素求和的实现方法 代码示例
  • 文章生成器-原创文章生成器

    在网络营销领域 优质文章是吸引新客户和保留老客户的重要工具 然而 生成高质量且符合SEO优化的文章并不是一件容易的事情 这就是为什么网站文章生成器如今备受欢迎的原因 而在众多的文章生成工具中 147GPT批量生成文章软件是一款非常出色的文章
  • ACM金牌学长,算法竞赛经验分享

    大家好 我是编程熊 不少读者问我 本科打算法竞赛 你如何训练的呀 有什么经验么 于是小熊写一篇ACM算法竞赛入门和进阶指南 分享一下经验和学习方法 也许你可能不参加算法竞赛 但知道厉害的人如何学习 训练 一步步变强 也是可以借鉴和学习的 如