如何开始学习竞争性编程

两个人在笔记本电脑前解决问题的图片

什么是竞争性编程?

竞技编程是一项智力运动,取决于解决问题的技能、数学和编程知识。竞争性编程比赛通常每年举行一次。有些是为高中生举办的,如 IOI,海鲜种类贝壳类有些是为大学生举办的,如 ICPC,还有一些是为任何人举办的,如 google code jam 和 Facebook 黑客杯。

为什么要学习竞争性编程

即使您对参加竞争性编程竞赛不感兴趣,花一些时间解决问题也会真正帮助您:

  1. 掌握您选择的编码语言
  2. 它将帮助您在编码面试中做得更好
  3. 它可以帮助您进行逻辑思考并更好地解决您面临的问题。

带有文字的图片,上面写着从这里开始在街上

带有文字的图片,上面写着从这里开始在街上

在进入竞争性编程之前你应该学习的东西

  1. 英语——基本阅读技巧
    我真的不知道学习英语的好资源,但我个人只是从看电影和玩游戏中学到的
  2. 触摸打字— 60 wpm
    我建议你在解决问题的同时练习你的触摸打字,如果你不愿意参加比赛,那么根本没有必要练习一个好的网站是关键
  3. 数学- 代数和基本几何学足以开始
    一个很好的资源是可汗学院,抢活动他们有很棒的教程,而且是免费的。如果你想认真地进入竞争性编程,你需要学习的不仅仅是代数和几何,但代数和基本几何足以让你前进。
    其他数学领域包括:
    * 概率
    * 组合学
    * 线性代数
    * 数论

用于竞争性编程的编程语言

我推荐 C++,因为它速度很快,而且由于运行时间限制,一些最高级的问题只能使用 C++ 或 java 解决。如果你的目标是参加像 ICPC 这样的比赛,C++ 是必须的,因为评委有时不接受用 python 编写的问题(c++、java 和 python 是唯一允许的语言)。但是,如果您已经掌握了编程语言的知识,我建议您将其作为开始使用,因为一开始使用哪种语言并不重要。

如何学习 C++

您可以按照自己喜欢的任何方式学习 C++,这里有一些资源可以让您有一个良好的开端。

  • 您可以使用免费代码训练营完成的YouTube 初学者基础课程获得基础知识
  • 之后你可以在HackerRank的 C++ 轨道上做一些问题,直到你觉得你已经掌握了基础知识
  • 如果你想获得更高级的知识,你可以使用Exercism C++ 轨道(我建议你结合解决其他网站的问题来这样做)

按顺序学习的竞争性编程主题

  1. 数据类型和运算符
  2. 状况
  3. 循环
  4. 嵌套循环
  5. 数组
  6. N维数组
  7. 复杂度分析和排序
  8. 职能
  9. 内置函数(如 sort、pow、min 和 max)
  10. STL(字符串、映射、队列、堆栈和链表等数据结构)
  11. 递归
  12. 按位运算和位掩码
  13. 数论
  14. 图论
  15. 动态规划
  16. 以及您在学习过程中会发现的更多主题

免费学习资源。

  • Competitive Programmer's Handbook
    这是一本由 Antti Laaksonen 编写的免费书籍,它将为您提供有关竞争性编程的所有算法和知识的指南
  • Geeks for geeks
    特别是算法列表
  • 如果有一个你不理解的话题,你可以使用谷歌,你会发现无数的文章解释它

为有竞争力的程序员提供良好的 YouTube 频道

  • Errichto He 是一个非常棒的 youtuber,他既解释了具体问题,也做关于算法和竞争性编程主题的教程。**
    **
  • 科林·盖伦
  • 可能还有很多,但这些是我看的

什么 IDE 用于竞争性编程?

如果您不使用 C++,您可以使用您喜欢的任何 IDE。如果您使用 C++,请使用任何带有 gnu 编译器的 ide,例如(代码块、clion 和 eclipse)。如果您是学生 clion 是最好的选择,因为它为学生提供免费许可证。我个人更喜欢代码块而不是 Eclipse,因为 Eclipse 设置是一个令人头疼的问题。只是不要使用 VISUAL STUDIO,因为它的编译器与 gnu 编译器有一些不同的规则(如果你愿意,你可以使用带有 gnu 编译器的 Visual Studio 代码,但它会减慢你的速度,因为你必须构建然后使用命令运行) .

解决问题的最佳站点(我在下面解释了如何使用每个站点)。

  • 代码力量
  • 在编码器
  • 黑客等级
  • 还有其他网站,如代码厨师和代码战争,但我个人从未尝试过这些网站,但人们说它们很棒。

如何不浪费时间解决问题。

一般问题:

  • 给每个问题 30 分钟的试用时间。
  • 如果您无法解决问题,请查看教程,然后尝试解决它。
  • 如果你还是不能解决,看看别人的解决方案。
  • 如果您仍然无法解决它,请搜索其主题(通常您可以通过阅读教程知道问题的主题是什么)并尝试理解它。
  • 如果毕竟你仍然无法解决它,就跳过它并做另一个问题。

比赛:

  • 先解决简单的问题,然后解决困难的问题,以最大限度地提高地位。
  • 您可以通过排名了解哪些问题容易解决(解决问题的人越多通常越容易)。
  • 最重要的是在比赛结束后始终解决(解决你在比赛期间无法解决的问题)。
  • 要解决问题,请查看问题的教程/编辑然后尝试解决它。

一般提示:

  • 尝试每天花一些时间进行竞争性编程,并尝试避免长时间的休息,因为真正的进步伴随着奉献。
  • 永远不要放弃相信我一开始对我们所有人来说都很艰难,也许你认为自己太愚蠢了,也许你认为这只是天赋,但相信我所有有竞争力的程序员都会经历这个。
  • 避免在阅读时陷入困境——一个好的规则是解决 90% 的问题,并在 10% 的时间阅读。因为解决问题是一种主要通过实践获得的技能。随着你进步和学习更多,阅读和教程的百分比会下降,直到你所做的 99% 将解决问题。
  • 如果您遇到困难并且没有在诸如 stackoverflow、codeforces和topcoder 之类的公共论坛上提问,请尝试寻找愿意回答您问题的人。

黑客排名

开始练习使用 HackerRank 是明智的,因为它有各种级别的令人敬畏的问题、良好的用户界面和针对所有问题的惊人社论。我建议你从算法技巧和数据结构技巧上做题。

使用 At 编码器指南解决问题

At coder 比 code force 对初学者更友好,并且它比黑客级别有更多的高级问题。我认为
在代码强制习惯竞赛风格的问题之前在编码器上解决问题是一个不错的选择。

如何使用它。

  • At coder table
    这是一张有很多 at 编码器问题的表。
  • 竞赛
    Coder 定期举办竞赛,参加竞赛会对你大有帮助。

表的使用方法:

这是一个问题表,分为 8 个难度(A 到 H)。A是最简单的问题,H是最难的问题。

我建议你开始解决 A 问题,直到它们变得简单,然后逐渐增加难度。

比赛:

尝试尽可能多地参加比赛,一旦完成比赛,您必须尝试解决以前无法解决的问题。

使用 Code Force 指南解决问题

的优点和缺点:

就种类和问题难度而言,它是最好的网站,但它缺乏友好的用户体验,有时教程非常糟糕。

如何使用它:

  1. 当你发现一个问题时,把它的代码写在 ide 上。完成后单击提交,然后选择您的编译器并提交。

图像显示在代码强制中提交问题的位置

图像显示在代码强制中提交问题的位置

要解决什么:

  1. 您应该进入问题设置页面,从右侧选择难度 800-1000,然后按应用。

显示代码力量中的问题集页面的图像

显示代码力量中的问题集页面的图像

2.然后使用复选标记图标按最受欢迎的排序

复选标记图标显示按最流行的问题排序的位置

复选标记图标显示按最流行的问题排序的位置

\3. 继续解决,直到你觉得问题很简单,然后将难度增加 200(将是 1000-1200)。并重复此操作,直到您成为竞争性编程大师

如何查看其他解决方案:

  1. 转到问题页面。找出它在右边的哪个比赛。并点击它。

img

img

\2. 找到您的问题并按下蓝色的人形图标

显示从何处按下以获取问题解决方案的图像

显示从何处按下以获取问题解决方案的图像

\3. 使用状态过滤器并选择接受的判决和您使用的语言,然后应用

显示状态过滤器位置的图像(右下角)

显示状态过滤器位置的图像(右下角)

4.点击比赛状态码查看代码

图像显示在何处按下以查看特定解决方案

图像显示在何处按下以查看特定解决方案

比赛:

在代码力量中有很多竞赛,它们是一种非常好的练习方式。比赛分为3个组别。Div 1 是最难的,Div 2 是中级,Div 3 适合初学者。您应该参加尽可能多的比赛并尽力而为

恭喜你现在应该准备好了

现在您应该准备好开始,而不会迷失和不知道该做什么。如果您有任何问题,请随时发表评论,我会尽快回复。我希望本指南能帮助您了解该做什么以及如何开始解决问题。


版权声明:本文为weixin_47967031原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。