精华内容
下载资源
问答
  • ACM算法模板.pdf

    2019-12-12 13:45:17
    ACM,CSP等竞赛的算法模板,整理于某大神之手,适用于参加PAT,CSP,ACM,蓝桥杯等算法竞赛的模板。
  • kuangbin的经典ACM算法模板(几乎涵盖所有常用算法) 里面的所有算法都没有main函数,复制一下就可以用。 Acmer必存
  • ACM算法模板 · 一些常用的算法模板-模板合集 ACM算法模板 · 一些常用的算法模板-模板合集 ACM算法模板 · 一些常用的算法模板-模板合集 ACM算法模板 · 一些常用的算法模板-模板合集 ACM算法模板 · 一些常用的...
  • ACM算法模板集史上最完整收藏版,绝对可靠有帮助,
  • 文件夹里是ACM一些常见算法的PPT课件:《Acm竞赛常用算法与数据结构》、《动态规划算法》、《南邮ACM算法与数据结构设计》、《算法分析与设计课件-动态规划法》、《算法设计与分析动态规划实例讲解》、《贪心算法》...
  • ACM算法集锦(实现代码),包括kurXX最小生成树、Prim、堆实现最短路、最短路DIJ普通版、floyd、拓扑排序、BELL_MAN、DFS强连通分支、最大匹配、最大权匹配,KM算法、两种欧拉路、求最小割集合的办法 【最小费用最大流...
  • ACM算法指南合集

    2019-03-09 21:25:23
    ACM算法指南合集
  • acm算法经典例题.pdf

    2020-10-19 06:57:02
    一数论 1: Wolf and Rabbit 描述 There is a hill with n holes around. The holes are signed from 0 to n-1. A rabbit must hide in one of the holes. A wolf searches the rabbit in anticlockwise order....
  • 压缩包没有密码,包含2个文件:ACM算法模板 · 一些常用的算法模板-模板合集.docx(整合了 ACM大部分算法的通用模板)和邝斌的ACM模板.docx(上海大学邝斌的ACM模板。 邝斌:ACM竞赛的佼佼者,2015World Final 选手...
  • 蓝桥杯ACM算法比赛模拟题30天每日训练
  • ACM算法总结

    2017-09-12 17:36:18
    资源分怎么没有0,只好选了个1,可免费,私信我! 这些资源都是一些ACM、做题的PPT或文档,希望能给喜欢ACM的同学带来帮助,我们一起交流!
  • 算法模板,主要包含:常用函数与STL、重要公式与定理、大数、数论、图论、集合。。等等。适合做算法的童鞋~
  • ACM算法模板合集

    2017-07-31 20:16:36
    整合了 ACM大部分算法的 通用模板
  • ACM国际大学生软件大赛,主要是考的些算法题,一些相关的软件比赛都是考的算法题,这些题目可以看看
  • ACM算法竞赛入门 概述

    2020-12-12 12:33:28
    文章目录扩展:算法竞赛-培养杰出程序员的捷径算法竞赛入门1. 竞赛语言和训练平台2. 判题和基本的输入输出3. 测试4. 编码速度(更新ing)5. 模板(更新ing)6. 题目分类(更新ing)7. 代码规范(更新ing) 扩展:...

    扩展:算法竞赛-培养杰出程序员的捷径

    • 杰出的程序员往往具备:
      1. 掌握多种编程语言
      2. 代码量大
      3. 算法知识丰富
      4. 数学强
      5. 做过很多项目
      6. 有团队精神
      7. 有创新意识
      8. 会选择行业方向
      9. etc…

      比尔·盖茨曾说过:“如果你想雇用一个工程师,看看他写的代码就够了。如果他没写过大量代码,就不要雇用他。”通过编写大量代码,能做到算法精妙合理、逻辑清晰透彻、代码喷涌而出、格式赏心悦目、挑 bug手到擒来,这是杰出程序员的基本功。ACM-ICPC 竞赛队员想达到在区域赛中获奖的水平,需要写5~10万行的代码。

    算法竞赛入门

    • ACM-ICPC(Association for Computing Machinery-International Collegiate Programming Contest): ACM国际大学生程序设计竞赛
    • NOIP(National Informatics Olympic League): 全国信息学奥林匹克联赛

    1. 竞赛语言和训练平台

    Notice:其中“洛谷试炼场”题目分类比较全,是很好的基础学习平台。

    2. 判题和基本的输入输出

    • OJ的判题
    1. OJ由机器自动判题,但机器并没有看懂代码的智能;即使是人工判题,人也很难短时间看懂程序。

    2. OJ判题是一种黑盒测试,它并不关心程序的内容,而是用测试数据来验证。

    • OJ的判题结果
      在这里插入图片描述
    • 打表
    1. 由于OJ不看程序内容,只关心程序的输入和输出,因此,在程序中不写详细过程,而是用printf或cout直接打印结果,也是允许的,这种方法叫“打表”。
    2. 另外,程序可能需要预处理数据,这个做法也称为“打表”。
    • 输入输出函数
    1. C++:输入函数cin,输出函数cout。

    2. C语言:输入函数scanf,输出函数printf。

    • 标准输入输出
      Description:OJ默认使用stdin和stdout,所以在提交程序时,并不用管OJ是怎么进行数据测试的。
      Notice:如果用到其它方法,会特别说明。
      提交过程图
    • 输入的结束-多组输入(以C语言为例)
    1. 默认结束(结束条件为无内容输入)

      int main(void){
      	int a, b;       // 输入a、b
      	while (scanf("%d %d", &a, &b) != EOF){  // EOF: 文件结束符(end-of-file)
          // 等价于while (~scanf("%d %d", &a, &b)){  // scanf函数读取不到数据后,会返回EOF,这是在stdio.h里面定义的常量(通常值为-1),表示输入流已经结束,-1在计算机里用二进制表达就是全1,“~”代表逻辑运算按位取反
        		// ...... ;  
      	}
      	return 0;
      }
      // 推荐用 while (~scanf("%d %d", &a, &b))
      
    2. 在输入数据中指定数据个数
      eg:hdu 1090题

      int main(){
      	    int n, a, b; 
      	    scanf("%d", &n);   
      	    while (n--){
          			scanf("%d %d", &a, &b);
       			printf("%d\n", a + b);
         	    } 
      	    return 0;
      	}
      
    3. 以特定元素作为结束符。
      eg:以0作为结束符,输入读到0时,就退出:

      while(~scanf("%d", &n) && n);
      
    • 输入输出的效率

    cin和cout效率低:与scanf、printf相比,cin、cout的效率很低,速度很慢。

    如果题目中有大量测试数据,由于cin、cout输入输出慢,可能导致TLE。在这种情况下,应使用scanf、printf。

    3. 测试

    Explain:一个队伍中,安排一个队员负责构造测试数据。
    把构造出的输入数据放在文件test.in里,程序的结果输出到文件test.out里。

    输出文件test.out可以不要:直接在屏幕上看输出结果。
    Notice:c++中创建.in文件,c++调用.in文件

    • 测试的两种方法:
    1. 在程序中加入测试代码

      #define mytest  // 定义一个预处理宏
      #ifdef  mytest  // 判断某个宏是否被定义,若已定义,执行随后的语句
      	freopen(“test.in”, “r”, stdin);  // 读数据文件标准输入
       	freopen(“test.out”, “w”, stdout);  // 将结果标准写入到输出文件
      #endif  // #if, #ifdef, #ifndef这些条件命令的结束标志
      
    2. 在行命令中重定向

    Description:不用在程序中加任何代码。例如生成的的可执行程序是abc,在windows或linux的行命令中,这样输入和输出到文件:

    abc <test.in >test.out
    
    • 对比测试数据
        复杂的题目,需要测试情况很多。可写两个程序,进行“对拍”。测试的时候,比较两个程序的输出是否一致。
      1. 提交到OJ的“好”程序;

      2. 暴力法程序,目的是用它生成测试数据 。

      3. 例如在windows系统下,生成的可执行文件分别是abc.exe、abc_1.exe,用文件比较命令fc比较它们的输出是否一致。

        abc.exe <test.in >test1.out
        abc_1.exe <test.in >test2.out
        fc test1.out test2.out /n
        
      4. 在linux系统中,文件比较命令是diff

    4. 编码速度:唯快不破!

    1. 读题要快
    2. 熟练掌握编辑器或IDE
    3. 不要“霸占”计算机
    4. 减少调试
    5. 互相检查
    6. 使用STL
    • 减少调试
      1. 机时非常宝贵,除了必要的代码输入和测试外,尽量少使用计算机,把机时让给队友。
      2. 为了减少调试,尽量使用不容易出错的方法,例如少用指针、使用静态数组、把逻辑功能模块化等等。
      3. 不要使用动态调试、单步跟踪、断点等调试工具。如果需要查看中间数据,就用cout或printf打印出调试信息。
      4. 程序如果有问题,不要在电脑上检查,应该打印出来坐在旁边看,把机时让给队友。

    5. 模板

    • 神器:模板
      1. 模板题并不常见
      2. 抄模板的能力
      3. 综合模板的能力
      4. 建模能力

    6. 题目分类

    • ACM题目分类–大类
      Ad Hoc,杂题
      Complete Search (Iterative/Recursive) ,穷举搜索(迭代/回溯)
      Divide and Conquer,分治法
      Greedy (usually the original ones),贪心法
      Dynamic Programming (usually the original ones),动态规划
      Graph,图论
      Mathematics,数学
      String Processing,模式匹配
      Computational Geometry,计算几何
      Some Harder/Rare Problems,罕见问题

      杂题可能很难:
      有些题只考察逻辑能力和编码能力,并不涉及数据结构或算法下面的题目都是大型模拟题,以繁琐、坑人而著名:

      1. Bzoj 1972,猪国杀
      2. Bzoj 1033,杀蚂蚁;
      3. Bzoj 2548,灭鼠行动。
    • ACM的知识宝库–细分

      1. ACM 中常用的算法
      2. ACM编程进阶
      3. IOI(The International Olympiad in Informatics Syllabus)大纲
      4. OI省选算法汇总

    7. 代码规范

    1. 使用万能头文件 #include <bits/stdc++.h>,OJ网站一般都支持,只有poj不支持。

    2. 输入判断结尾不要用EOF,用 ‘~’,例如:

      ~scanf("%d", &n)
      
    3. 换行。用 K&R 风格,即左大括号不换行,右大括号单列一行。

    4. 变量定义。变量定义在这个变量被调用的最近的地方,例如:

      for (int i = 0; i < 10; i++)       //i只在这个循环体内使用
       		int s = i * i;
      
    5. 最好不要用宏。不管是宏定义,还是宏函数,都容易出问题。不要用#define定义常量,而是用const定义常量,例如:
      const int MAX = 1000005;把宏函数写成普通函数。

    展开全文
  • 迪杰斯特拉算法求最短路径,图搜索算法,图连通分量等
  • ACM算法讲座 线段树及其应用 06 基础数学 描述集合论 汪方 什么线段树 线段树是用一种树状结构来存储一个连续区间的信息的数据结构 线段树有什么用 它主要用于处理一段连续区间的插入,查找,统计,查询等操作 复杂度 ...
  • acm算法秘籍

    2019-01-10 21:10:17
    acm算法书,acmer必用的算法书。 目录 语言相关 常见基础错误 基础知识 枚举 模拟 排序 BFS DFS 二分 动态规划 DP基础 基础DP问题 树形DP 状压DP 动态规划的优化 数据结构 并查集 树状数组 线段树 字典树 Splay ST表...
  • 浅谈ACM算法学习与有效训练

    万次阅读 多人点赞 2018-08-25 15:36:37
    一、什么是有效地训练? 很多ACMer入门的时候,都被告知:要多做题,做500多道... 其实,500题仅仅是一个标志,而且仅仅表示你做ACM-ICPC有一定的时间,算是入门了吧,而且这500道题目中自己独立思考做出来的有多...

    一、什么是有效地训练?
      很多ACMer入门的时候,都被告知:要多做题,做500多道就变牛了。其实,这既不是充分条件、也不会是必要条件。
     
      我觉得一般情况下,对于我们普通学校的大学生,各方面能力的差距不会太大,在这种情况下,训练和学习的方法尤为重要。
      其实,500题仅仅是一个标志,而且仅仅表示你做ACM-ICPC有一定的时间,算是入门了吧,而且这500道题目中自己独立思考做出来的有多少,半小时内做出来的有多少,看别人的题解做出来的题目有多少,半年后仍然会做的题目有多少........
     
    二、训练的目的是什么?
      1、提高编程能力
      2、学习算法,(读书,读论文,包括做一些题目验证)
      3、准备好面临将到来的挑战(熟悉题型,调整心态)
      4、启发思维。

    三、关于算法学习的一些建议:

      <1>算法学习是ACM比赛所要推广或者要提倡的一个方面
      记得曾经路过某人的blog,上面说他作比赛的时候遇到了一个dijkstra,他没做出来,然后评论到(大意):我才不会花时间去搞明白“这种”算法。 “这种”也许有可能是指:没什么实用性,对吧,这样我就不想评论了(又是有关科学和工程的讨论)。但起码有一点需要明确的:ACM-ICPC比赛时关于计算机科学的比赛,计算机科学是算法的科学,计算机算法中dijkstra有着重要的实际和启发意义,所以比赛一定要考。
      你参加这个比赛,要拿奖,就必须学习这种算法。你也许觉得你智商很高,但ACM-ICPC比赛本身不是智力比赛,比赛就是要让你去学习这些东西,所以,如果你不想学的话,我觉得也没有必要参加。说道这,可能偏题有点远,但是希望以上的分析能得出这样一个基础结论:不想学好算法,那没有必要来比赛。
     
      <2>用模板是不好的
      现在很多我们弱校的ACM-ICPC选手比较依赖模板,说实话,我也很依赖,但是我起码知道一点,这样是不对的,某种意义上说,这是你没有把算法学明白的一种表现。而且也严重影响编码速度。在我参加过的亚洲区域赛和亚洲区域总决赛(EC Final),那些大佬们从来没有看过模板,全部现场敲。正常的比赛绝对不会考察模板题的,每道题都是3到5个知识点糅合到一起考察的。
     
      我觉得敲代码的时间没有浪费,某大牛曾说:因为每次敲都有可能有不同的错误,所以不用模板是好习惯。我最开始学dancing link的的时候,自己敲出了代码,然后接下来的几道题部分参考了以前的代码,后来基本上是直接copy。现在,当别人问我dancing link算法或有关的题目的时候,我已经是一脸茫然。
     
      所以,用模板是不好的,有时候由于某些原因可能你用了模板,但你起码要知道这要做是不对的,并且有机会要改正。
     
      <3>需要深入学习
      像 ACRush、zzy、ahyangyi…等等国家队的天才们,本身难以说我们与他们之间有什么可比性。但是他们的学习方法应该还是值得借鉴的,他们的学习方法当然我们得不到言传身教,但是从他们在国家队集训的论文中和他们搞完ACM-ICPC以后的轨迹中,可以有所体现。那就是:深入学习。
      首先,我觉得ACMer学算法不应停留在看看代码实现这个层面,在算法思想上要有清醒的认识,在正确性分析上要也应该要有较好的逻辑。因为网上的代码的实现上的一些细枝末节很可能掩盖了算法本身有的简洁性、美感和思想。因而丧失了对算法整体上的一些认识。还拿dijkstra算法打比方,有些算法不是基于 dijskstra的直接建模,而是需要你修改这个算法,这时你对算法没有真正理解的话,也就一筹莫展了。
      所以,要阅读论文和书籍,尤其与英文书籍,窥到它的本质。另一方面,只有这样,你学的的东西才能在ACM-ICPC以外,给你一定的启发——否则你会迅速忘掉它的。


      <4>独立思考
      这点我也很惭愧,因为我也是缺乏独立思考的。很多题我不会了,就去搜解题报告,所以反而我的搜资料能力变得特别强。大佬们遇到题不会的时候,也不会很急于把题目做出来,可能每隔一段时间又拿出来想一次,总有一天想通了,之后这一类型的题目基本上也就没有什么问题了。
     
      而我恰恰比较“虚荣”,做到的题目不会不太愿意想太久,就想尽量快些AC,于是急于看解题报告,这样导致的一个问题就是有些重要的东西解题报告中没有提到,而我也没去想就把他们忽略了,这样,我还是不会做。我和大佬讨论问题的时候,我不会一般就直接找他要代码,但是他不懂的时候,顶多问我大体的思路,而绝对不会要代码的。


      <5>做有意义的题
      1.不要做水题,这里的水题定义为:一眼就能看出做法,而且中途的实现可以预计没有太多问题的题目。
      2.做能够强化你最近学到的东西的题目
      3.你现在不会,但你应该会的题目。
      这同时也是在说,某些没太多代表性的题目可以少做,因为对比赛帮助不大。(当然我这个参加比赛的目的很功利,非功利主义者另当别论)刚才,我把我在poj上的号和他的号对比了下,他ac而我没ac的基本上是难题,我ac他没ac的一般是水题,看得我想哭,5555。
     
      补充一点:ac的人多的并不一定代表着水题,有些几千人ac的题目,在现场赛中ac的人很少,这样的题目往往是有一定思维难度且编码不难的好题,这种题目要认真做,某个学长说:经典的题目啊,只有那么多,做一道,就少一道。
     
      <6>估算好某种训练所需要的时间
      我觉得我学网络流就是一个例子,我大概在亚洲区域赛之前2个月开始学习网络流,1个月前开始学习费用流,但是对于我来讲,这两个月培养出来的网络流思维还是不够(虽然也做了不少题),特别是,这种题目往往作为中难的题目出现,不会让你随便水的,于是,北京赛区的那道网络流当时就没有想出来——功利地说,学习网络流没有得到好的效果。
     
      所以,现在来看,当时其实我可以不搞网络流。如果要学一种比较有难度的东西,并且还必须把他搞好,应该较早地,全面地学习,必须长期的训练以培养这种思维。打个比方,如果你微积分平时不学,仅仅考试前一周狂做题目,我觉得上90分是很困难的。
      当然,这要根据个人情况而定,我的理解能力应该说是中等水平,如果牛的话应该可以更快地学好。
     
      <7>有关训练的度
    我觉得其实通宵刷题,或者太长时间地做题,还是不好的。我们为什么会这样有热情地做题呢,因为我们有兴趣;但是一个人的成功不仅仅依赖于兴趣,还要依赖于自控。这和打游戏是一个道理,游戏太有趣以至于我们常常通宵——ICPC题目也太有趣,所以有时候通宵。而且很多时候是,由于一道题AC不掉,所以赌气一定要搞定才睡觉,这样一不小心,就通宵了。
      其实我明白,通宵不一定效果好,这仅仅说明了你兴趣很高涨而已。通宵往往会打乱你的时间安排,打乱你的生物钟,进而影响你短期或是中期的训练计划。而且,疲惫的状态下做题,你往往只有ac题目的欲望,而完全丧失了ac题目的灵气。所以,我建议,ACMer一定要合理安排作息,能够自控,这样不仅仅对你做 ACM-ICPC有好处。
      总之,有效训练是很重要,只有通过有效的训练你才能获得你参加这个比赛应得的东西。
     
      最后要说下刻苦训练这一点,ACM不是智力测试,不是你什么都不做就可以天上掉馅饼的。当然我不是说题目一定要做多少多少道,但如果你觉得你可以一心二用,从概率上来讲,你百分之九十地错了,我是个工科生,我相信概率而非奇迹。
     
      ACM-ICPC绝不是大学生活的全部,也不是搞算法的全部,你大可以花时间去做其他研究,做项目,或者参加学生工作(我更欣赏那些对人生和职业有良好规划的ACMer);但是,如果你搞ICPC的那段时间你不是全部投入,那在ACM-ICPC生涯中,将只有后悔。

     

     

    个人公众号:ACM算法日常

    专注于基础算法的研究工作,深入解析ACM算法题,五分钟阅读,轻松理解每一行源代码。内容涉及算法、C/C++、机器学习等。

     

     

    展开全文
  • 经典ACM算法合集

    2013-06-03 23:28:42
    经典ACM算法合集,需要了解acm的同学可以看看
  • ACM算法学习路线、清单

    千次阅读 2020-07-15 11:50:22
    入门 模拟、暴力、贪心、高精度、排序 图论 搜索 BFS、DFS、IDDFS、IDA*、A*、双向BFS、记忆化 最短路 SPFA、bellman-fort...分数规划(01分数规划) 其他 随机算法、模拟退火、朱刘算法、爬山算法、遗传算法、DLX算法

    入门

    模拟、暴力、贪心、高精度、排序

    图论

    搜索

    BFS、DFS、IDDFS、IDA*、A*、双向BFS、记忆化

    最短路

    SPFA、bellman-fort(队列优化)、Dijkstra(堆优化)、Johnson、Floyd、差分约束、第k短路

    树的重心和直径、dfs序、树链刨分与动态树、LCA、Prufer编码及Cayley定理、分治、最小生成树{ Prim(堆优化)、Kruskal }

    图的联通

    强联通分量、双联通分量、割点和桥、2-SAT

    网络

    网络流{
    最大流-最小割
    费用流{ zkw费用流、有负费用圈的转化 }
    有上下界的网络流 }、
    二分图{
    最大匹配(匈牙利算法)、最大独立集、最大点权覆盖集、最小路径覆盖}、
    方案唯一性

    欧拉图

    最小平均循环

    拓扑排序

    计算几何

    凸包、半平面交、圆并圆交、pick定理、三角刨分、扫描线、旋转卡壳、仿射变换与矩阵

    技巧与思想

    二分、三分、位运算、离散化、分块、图的拆点、数列差分化及前缀和、启发式合并、cdq分治、哈夫曼编码、倍增(RMQ、LCA)、莫队算法(树上莫队)

    字符串

    KMP、Trie(xor问题) 、AC自动机、
    后缀树{
    后缀数组(波兰表)
    后缀自动机
    后缀仙人掌}、
    LCP、Manacher、有限状态自动机

    博弈论

    SG函数、极大极小搜索算法(alpha-beta)

    数据结构

    栈(单调栈)、队列(单调队列)、堆(左偏堆)、链表、哈希表、
    并查集{
    路径压缩、带边权的并查集、拆点}、
    块状链表-块状树、树状数组、
    线段树{
    Lazy-tag、合并、动态开点、zkw线段树}、
    平衡树{
    SBT、
    splay{ 维护序列:Lazy-tag、合并与分裂 Finger search}
    treap 合并与分裂
    替罪羊树}、
    划分树、归并树、k-d树、主席树、树套树

    数学相关

    线性筛素数、费马小定理及mr素数判断、高斯消元、原根、模方程{ 模意义下开根、模意义下求对数}、乘法逆元、容斥原理及Ramsey定理(补集转化)、gcd及扩展gcd、中国剩余定理、快速幂、置换、矩阵乘法、欧拉函数、数值与积分、概率与期望、更相减损术、莫比乌斯反演、快速傅里叶变换、排列组合、群论与Burnisde-Polya、母函数

    规划

    动态规划{
    背包{01背包、完全背包、多重背包}
    简单模型{LCS、LIS、LCIS}
    区间DP
    树形DP
    数位DP
    概率DP
    斜率优化
    四边形不等式(决策单调性)
    数据结构优化
    状态压缩(基于连通性的状态压缩)}、
    线性规划{ 转化为图论模型、单纯型法}、
    分数规划(01分数规划)

    其他

    随机算法、模拟退火、朱刘算法、爬山算法、遗传算法、DLX算法

    展开全文
  • 内含ACM算法模板(C++实现/初学者适用),《算法竞赛入门经典》第二版范例代码
  • ACM算法汇总及目录

    2015-05-03 11:25:16
    略微全面的总结了ACM算法竞赛中的算法及下载链接
  • acm大赛所用算法进行细致分类,按照每个条目逐一练习,肯定能提高复习效率,帮助大家在比赛中取得满意成绩
  • acm算法模板,包含竞赛需要的各类算法。。。。。。
  • ACM 算法实现 Java语言

    2014-03-13 15:19:15
    33道 ACM算法题目 用java实现 ACM都已经通过
  • ACM算法竞赛生涯总结---ACM-ICPC墓志铭

    千次阅读 多人点赞 2018-05-28 12:34:29
    算起来我的算法竞赛生涯占了整整1.5年,3/8 的大学生涯。大学以前是一点也不了解这个东西的,甚至没有接触过计算机,大学所学专业(信息与计算科学)也与计算机不太沾边。大一上期在MOOC上学了C语言,接着学了C++、...

    其实去年打完 ECL-FINAL就应该写这个墓志铭了的,奈何当时由于各种原因,心情不好,前途无望,加上考试周在即就一直没有写。

    参赛获奖经历

    时间比赛获奖
    大二上2016青岛区域赛Fe
    大二上2016EC-FinalFe
    大二下江苏省省赛一等奖
    大二下西安邀请赛Cu
    大二下蓝桥杯二等奖
    大三上2017西安区域赛Fe
    大三上2017南宁区域赛Cu
    大三上2017乌鲁木齐区域赛Cu
    大三上2017ECL-FinalCu
    大三下蓝桥杯java A组全国rk2

    遗产

    https://github.com/zouzhitao/competitive-programing

    竞赛经历

    算起来我的算法竞赛生涯占了整整1.5年,3/8 的大学生涯。大学以前是一点也不了解这个东西的,甚至没有接触过计算机,大学所学专业(信息与计算科学)也与计算机不太沾边。大一上期在MOOC上学了C语言,接着学了C++、JAVA算是有基本的编程能力了吧,大一下学了THU在学堂在线开的数据结构,第一次接触oj,当时觉得真的很好玩啊,很有意思,就去了解了一下,无意中听人说起ACM-ICPC这个东西,然后通过各种渠道了解到敝校竟然也有这个东西,记得当时连敝校计算机学院我都找不着呢,通过知乎和一位敝校ACM管理者联系上了,听说他们不歧视专业,当时很开心,就去报名了,那个时候学校ACM还没有起步呢,记得招新赛是在军训结束,那时我连招新赛是在哪里举办都不知道…,还好当时教主给了我一个比赛链接,我就在宿舍中忍受着室友LOL的喊声中打完了招新赛,结果成绩令我吃惊,居然rk2。不过只有10来个人参加。

    暑假训练也很水,记得就学了dp和并查集,当时真想一走了之,浪费大量时间而无所得,不过好在,毒胸是个有趣的人,当时跟他挺聊得来的,也就坚持下来了,他也很好,有求必应,当时他和胡牛会训练到很晚,那应该是他们最努力的一个暑假了吧,而后就…,

    大二上期是加入ACM第一个学期,这时情形完全变了,大家不再来了,感觉人数从招新赛的10个变到只有2,3个人了,俱乐部晚上长期只有我,mr, 毒胸,其他人一般仅在要比赛的时候才出现,那时是毒胸们的赛季,他们正在准备区域赛,那也是我第一次了解到区域赛,看着毒胸有时训练十分忧愁,因为队友都很少来。第一学期什么也没学到,因为大三的要打区域赛,往往就是他们拉题直接做,然后让我们也跟着做,所以暴零就成为了常态…这一学期我参加过两次区域赛,两次都打铁了,真是什么也没学,当时如果能学学二分,那在EC上也能拿铜了。

    基本上从那次EC和寒假训练后就奠定了我和我队友组队的基础,在那时应该我队应该算是校内最强的吧。寒假基本就学了白书的基础算法,那时才是真正开始学习算法,也感谢毒胸当时还在,不然ACM真的得垮下去,大三的全部退役,而我们一学期啥也没学到,连二分都不知道是什么东西,刷题不会超过100道…,大二第二学期是真正开始训练的一学期,这时我校就两队B(zb,ch,rx),A(me,mr,yx),还有一个女队。当时大家还是很有热情的,有时候我们训练的很晚,也打过1.35的CF,见过凌晨2,3,4,5点的JNU。不过当时我们大二的谁也不服谁,基本是群龙无首的状态,如果没有毒胸,训练还真搞不下去。那学期在5月份敝队拿了省1。不过训练完全没有章法,其实当时连白书和紫书也没刷完(其实现在也没刷完~),往往我们就是各自为政,各自学各自的东西,这样走实在太慢了,要稳拿银牌那是不可能的,往往遇到一个问题,连个交流的队友也没有,相当的坑爹。基本上只能是1+1+1 <= 3.

    过后就是大二暑假了,这个暑假我队犯了最大的错误,就是我去参加数学建模那sb东西了,队友去NUS访学了,当时我个人的训练非常之消极,一是一学期后没有感到有任何成绩,CF连1900+都打不了,比赛依旧只能A铜牌题,而且我当时犯了一个最大的错误,我竟然觉得队友都没来训练,我为什么要去训练…,我全然没有想到这是个人的事情。当时训练的时候一遇到挫折我就这样想,训练消极怠工,而反观B队却训练的非常有效率。如果说大二上还兴趣盎然,这时唯一支撑着我的就是区域赛拿牌了,被虐的没有任何兴趣可提了。

    大三上期为了打比赛,我队又好好训练了一下,这时毒胸已经去准备考研了,俱乐部少了一些欢乐,不过我感觉当时敝队有一点不好,就是对这些想法没有开诚布公的交流过,我也不知道他们怎么想的,这时的训练,我明显感到是很消沉的。完全不是积极的,大家都有点感觉就是能少来一天就少来一天吧,到点能快些走掉就快些走掉。没有全身心投入是最大的问题。然而我们看到的成果是我们在网络赛打进了更多的赛区(5个吧),比上一届(1个)还是要多很多的。我第一次意识到这个问题是在,西安区域赛打铁之后。我发现这种消极是绝对不行的,我和队友交流了一下,主要是提高大家积极性和,认清自我吧,我们分了一下工,各自去解决一些不会的部分。有认真训练了一个月吧,虽然这时已经比不上大二下期的认真了,这时再也不会熬夜去解决问题了,太会算了,觉得这是不值得的,可是真正的兴趣可就是体现在这些吃亏的地方啊。这时训练的只有敝队,因为B队在CCPC拿Ag了,他们再也不训练了(所以后来所有区域赛都Fe了).我们终于在南宁拿了第一块区域赛铜牌,吃了西安的亏,这时我们都用上了一些策略。差了一点拿银(差点罚时),这场比赛后是真的萎靡了,完全认清现实,拿银是不可能的了,需要运气,敝队水平就是Cu了,当然如果再打一年应该是没问题的。最后一次比赛是在上海ECL-FINAL,那场比赛估计是发挥出最大实力了,感觉到银牌是真的很艰难。那场比赛后大家就完全退役了,当初一起训练的6个人各奔东西,后来我就和 ch还有在交流过ACM的事情了。两人都略带遗憾的退役了。我很想再来一年着,因为这时我意识到了自己的问题,可是时间不饶人啊,考研的考研,保研的保研,大家都走了。

    大三下还是刷过点题的,因为抱了这个蓝桥杯,这时刷题都主要是为了参加蓝桥杯和校招面试了,感觉自己ACM生涯还是学了一些东西的,应该说在工业界还是够用了吧(LeetCode 第一场周赛就AK了),蓝桥杯拿了rk2,还是有点意外惊喜。这一学期算是比较认真的学期了吧,可能是因为准备考研了,又重新找到了以前的那种努力学习的劲头,平时也经常思考自己的前途和大学生涯,就不可避免的想到ACM的经历。这次因为蓝桥杯意外拿了rk2,冷思考之后决定写下这篇文章,致敬我的ACM岁月。最后谈一点感想吧。

    感想

    1. ACM是一个需要全身心投入的比赛,任何比赛身后的荣誉,附加值,都没有兴趣来的重要

    2. 拿银真的不需要天分,只需要努力刷题,就够了

    3. 类似敝校(弱校211) 想拿金是不太可能的,甚至拿银也得看运气,原因是:

      • 敝校ACM不受重视,本来计算机专业就不好
      • 敝校励志保研的学子中ACM不是唯一途径,甚至不是途径所以大多天赋还够用的基本不会完全投入到这里,因为只要认真算一算就知道这不值得,甚至直接工作的也会发现这不值得。这就使得敝校ACM选手中两类人不会完全投入,一是喜欢技术的,二是天赋还行的。(我看过我的下届中有同学因为这两个原因退役)
    4. 理解了ACM的标志的意义:发现问题,思考问题,想办法得到AC(气球),这里绝对没有想通过这种方式追求得到额外附加值的意思

    留下的遗憾

    • 没能拿银牌: 这个遗憾再也不能补上了
    • CF没上1900+: 这个遗憾还是能补上的

    ACM之外的思考

    • 积极的意义: 同样做一件事情,积极会带来至少 50%的收益。
    • 努力的意义: 其他事情(家庭,外表,地位,财富)都是已经定型了的,无法改变,唯一能做的就是好好努力,获得选择的权力了。
    • 认清自我的意义: 找准自己的定位是很重要的,这决定了你努力的方向。比如我就没法拿金。
    • 认清现实的意义: 现实是不会看到你的努力的,现实甚至不知道你是谁,所以别指望努力就能成功,踏实一点,一步一个脚印踩才是走路的正确方式。失败是常态,失败后需要的不是消极怠工咒骂老天,二是需要认识错误,反思自我,哪些是能够拯救的。
    展开全文
  • ACM算法大全

    2012-12-03 18:37:12
    文档包含各种经典C语言算法,各种排序算法,搜索算法,图算法。。
  • acm算法题目

    2013-03-24 11:54:33
    acm算法题目,帮助我们提高算法的思想,有助于我们在算法竞赛中取得优异的成绩。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 101,304
精华内容 40,521
关键字:

acm算法