2021年6月组会分享--算法竞赛入门及背包问题解析

一 竞赛简介

万恶之源 各种竞赛知识的汇总。

1. 赛制介绍

赛制介绍

2. 平台介绍

leetcode 主找工作,周赛/双周赛,每周都有,时间短,可查看别人的代码,学习别人的优秀代码和解题思路,成长快
codeforces 主竞赛,每周也会举办比赛(赛题质量高,全英文)
洛谷 (主竞赛,国内的高质量平台,常举行比赛,模板题讲解清晰,大佬多)
赛氪(主竞赛通告,国内的OJ平台,主要优点是国内竞赛的新闻会在这个平台发布,可多关注)
牛客 (主工作,也有周赛,要自己处理输入输出,比leetcode更贴近工作题/竞赛题)
其他大学的OJ也有不错的,例如北大的poj, 杭电的hduoj, 电子科大的cdoj

3. 竞赛介绍

蓝桥杯(一般四月份举行初赛,认可度高,获奖难度低,非常推荐参加) 获奖可奖学金加分/申请实践分(不需要助教拿学分了,可选择拿工资)尤其推荐参加python组,c++组一般是打ACM的真大佬,卷不过;java组参赛人数太少;python组研究生和本科生同组,优势明显。报名费300块,可信软学院代缴,获得国奖还有额外奖励。
传智杯 (一年一届,一般10-12月举办)
全国大学生算法设计与编程挑战赛 (每个季度一次比赛,才举办到第二届,认可度一般)
电子科技大学ACM校赛(链接是2021年的,没有官网,一般四五月份举行,请关注《成电微教务》,会有报名通知)
“联发科技杯”电子科技大学IEEEXtreme极限编程校内赛(链接是2021年的,没有官网,一般四五月份举行《IEEEUESTC》公众号,会有报名通知)
华为软件精英挑战赛(一般三四月份举行,不是常规的编程算法竞赛,偏工程中的实际应用,感觉难度略大)
中兴捧月杯(一般四五月份举行,难度比华为软挑低)

获取比赛消息的渠道:信软学院有个学科竞赛的qq群(1074685825),计算机学院通知群也有部分竞赛通知,赛氪平台的通知,相关的主办方公众号等。

二 我的一点经验

1. 语言选择

  • C++? java? python? even javascript?
  • C++ 新入坑的必选
  1. 对数据控制的极致,内置的容器,运行效率极高,使用简单;内置的算法,快排/二分查找/找下界等,可自定义数据结构,极其的好用;
    例题 力扣周赛第三题
  2. 运行效率极高,很多数据规模临界的用例,C++能过,但是python过不了;
    例题 IEEEXtreme极限编程校内赛 (比赛完看不了题了)
  3. 例题讲解的示例代码很多都是C++ 写的,包括力扣周赛的排行榜前段的大佬;
  4. 各种OJ必定支持的一门语言.
  • python 蓝桥杯必选 深度学习之友
  1. 蓝桥杯暴打本科生的不二之选,只会暴力解法都能一等奖的天选之组;
  2. 极致的代码简化,神奇的切片操作,写起来非常省心;
  3. 跑模型必须要会的一门语言,即使不搞神经网络算法,毕设也一定会要跑模型的;
  4. 主流OJ支持较好,但是比较老的OJ就不那么好了。(说的就是成电的OJ,ACM校赛居然只支持C++和java)
  • java 工作之友
  1. 后端开发必会,spring全家桶要用的贼溜;
  2. 用来写竞赛算法嘛,就恩恩恩恩。。。个人不太合适,既不如C++运行效率高,没指针操作;也不如python代码简洁,有点鸡肋。之前ACM国际大赛上有队伍用过java,后来也弃用了。当然用来刷题,练java的熟练度,方便找工作的也很好,有不少同学也是这么做的;
  3. 主流OJ的支持较好,目测比python好。
  • javascript 前端玩家打算法比赛的首选
  1. 之前看彦哥和然哥用过,我自己不会,感兴趣的咨询他们吧(很惭愧);
  2. 支持的平台较少,leetcode是支持的,但是主流的OJ支持率很惨淡。
  • 总结:不同语言有不同的适用环境,一般意义上来说没有谁优谁劣,只能说对某个任务是否好用。

2. 编辑工具选择

  • vim 永远的神
  1. 主键盘毁灭者,可完全无视鼠标的存在

  2. 单文件编辑最好用的编辑器

  3. 服务器文件编辑的最好选择,也许是唯一的选择

  4. 功能强大的代码补全插件,C++,python,java均支持

  5. 在编辑器内执行命令的特性让人欲罢不能

  6. 内置的gdb调试工具,代码调试较为方便

  7. 陡峭的学习曲线让人望而生畏
    2021年6月组会分享--算法竞赛入门及背包问题解析_第1张图片

  8. 其他资料:
    vim环境搭建
    vim半小时入门官方教程。命令行执行下方代码:(如果要指定语言,用后面两个命令即可,分别是英文和中文,推荐用英文版,方便编辑)

vimtutor
vimtutor en
vimtutor zh

简要讲解vim的三种模式。
2021年6月组会分享--算法竞赛入门及背包问题解析_第2张图片

  • pycharm python之友
  1. 不用过多解释,写python的首选工具
  • idea java必选
  1. 也不用过多解释,写java的首选工具

3. 常用技巧

  • 刷题的结构组织
    按照各个OJ平台作为一级目录,题目编号作为二级目录,二级目录下的是源代码和输入输出文件。整个文件夹用git做版本管理,可推送到自己的github上,避免由于系统崩溃等原因导致的数据丢失。
  • 输入重定向
./a.out 
  • 输入/输出重定向
./a.out out.txt
python3 my.py out.txt
  • 结果自动对比
diff out.txt std.txt
  • 对拍
    对拍是个啥,用来做什么的

  • 暴力打表找规律
    一个网友的例子

  • 蓝桥杯如何查文档
    python是提供了内置package的使用文档的,查询方式如下:

python3
>>> help()
  • 输出带有固定字符的题目,一定要用CV,别过于相信自己的眼睛和手
    之前比赛有题目的输出只有Y5S!或者NO,比赛结束的时候一群人觉得自己代码没错,结果提交上去一直WA,有人就提示说输出的不是YES!中间的是个5.
  • 要有平和的心态
    2021年6月组会分享--算法竞赛入门及背包问题解析_第3张图片

不是大佬的话,建议还是跟榜做题,挑AC多的题目做。
也不要死磕,某题做不出来,或者一直WA,该放弃就放弃。

三 背包问题

经典中的经典 背包九讲

四 动态规划与记忆化搜索的关系探讨

一个大佬的博客

五 其他资料

cpp reference
倍增思想白话讲解
操作系统革命 开源的哲学

你可能感兴趣的:(算法)