【转】 如何提高自己的acm个人能力

article/2025/9/4 16:32:24
转载自 简单de数字
最终编辑 fading_code
by   zfy0701
本来以为HNU的huicpc035和我一样退役了,后来听说他组成了新的footman队,于是又关注了下他。

035体现了两个我觉得非常重要的品质:

1、刻苦的训练

2、有效的训练


(本文将主要讨论个人训练,不讨论团队合作)

而这些品质对于我们弱校ACMer选手水平的提高我觉得很重要。(注意:仅限于我们ACM-ICPC的弱校,即最多只能勉强摘银的学校,不要一概而论)


刻苦的训练我打算最后稍微提一下。主要说后者:什么是有效地训练?


我想说下我的理解。

很多ACMer入门的时候,都被告知:要多做题,做个500多道就变牛了。其实,这既不是充分条件、也不会是必要条件。


我觉得一般情况下,对于我们普通学校的大学生,各方面能力的差距不会太大,在这种情况下,训练和学习的方法尤为重要。


其实,500题仅仅是一个标志,而且仅仅表示你做ACM-ICPC有一定的时间,


我们训练的目的是什么?我觉得有四点

1、提高编程能力

2、学习算法,(读书,读论文,包括做一些题目验证)

3、准备好面临将到来的挑战(熟悉题型,调整心态)

4、启发思维。


这里四个目的,从训练的角度上,重要性逐次递减;为什么呢?

因为前面的因素是后面的基础。而是后面的目的,想达成越为不易。我觉得前3者能保证你ac掉你能做的题,即使难题始终不会做,也可以ac掉中等偏难的题目。


而需要一定思维难度的题,要以前三者为基础而且属于训练的后期,中期只能作为偶尔调节。当然,我思维也烂得要死,对这点没什么发言权,大家可以鄙视我。


我这里想主要说下第2点。


对于算法,我发现,很多我们这样的弱校ACMer选手没有侧重好算法的学习。

下面要讲的几点,可能都很老套,但我想以035对比我自己的例子给大家做说明。


<1>算法学习是ACM比赛所要推广或者要提倡的一个方面

记得曾经路过某人的blog,上面说他作比赛的时候遇到了一个dijkstra,他没做出来,然后评论到(大意):我才不会花时间去搞明白“这种”算法。


“这种”也许有可能是指:没什么实用性,对吧,这样我就不想评论了(又是有关科学和工程的讨论)。


但起码有一点需要明确的:ACM-ICPC比赛时关于计算机科学的比赛,计算机科学是算法的科学,计算机算法中dijkstra有着重要的实际和启发意义,所以比赛一定要考。

你参加这个比赛,要拿奖,就必须学习这种算法。你也许觉得你智商很高,但ACM-ICPC比赛本身不是智力比赛,比赛就是要让你去学习这些东西,所以,如果你不想学的话,我觉得也没有必要参加。


说道这,可能偏题有点远,但是希望以上的分析能得出这样一个基础结论:不想学好算法,那没有必要来比赛。


<2>用模板是不好的

现在很多我们弱校的ACM-ICPC选手比较依赖模板,说实话,我也很依赖,但是我起码知道一点,这样是不对的,某种意义上说,这是你没有把算法学明白的一种表现。而且也严重影响编码速度。


在我见过的huicpc035参加过的比赛中,他从来没有看过模板,全部现场敲,有一次比赛有个图强连通分量+缩点+染色+什么的题去了,我在他们机房做,我则抄模板,结果总共敲了1个半小时,而035明确算法之后,啪啦啪啦,估计30多分钟就敲完了。这里顺便八卦一下他:我和kevin以前去湖大集训队玩的时候,给他取了个外号——打字猛男(他应该还不知道)。因为他敲键盘的声音特别大特别快,呵呵。


我觉得他敲代码的时间没有浪费,某牛曾说:因为每次敲都有可能有不同的错误,所以不用模板是好习惯。我最开始学dancing link的的时候,自己敲出了代码,然后接下来的几道题部分参考了以前的代码,后来基本上是直接copy。现在,当别人问我dancing link算法或有关的题目的时候,我已经是一脸茫然。


所以,用模板是不好的,有时候由于某些原因可能你用了模板,但你起码要知道这要做是不对的,并且有机会要改正。


<3>需要深入学习

像ACRush、zzy、ahyangyi...等等国家队的天才们,本身难以说我们与他们之间有什么可比性。但是他们的学习方法应该还是值得借鉴的,他们的学习方法当然我们得不到言传身教,但是从他们在国家队集训的论文中和他们搞完ACM-ICPC以后的轨迹中,可以有所体现。那就是:深入学习。


其实这点我来讲可能还是不够有力,因为我这方面也很欠缺,我尽量说下我的想法。


首先,觉得ACMer学算法不应停留在看看代码实现这个层面,在算法思想上要有清醒的认识,在正确性分析上要也应该要有较好的逻辑。因为网上的代码的实现上的一些细枝末节很可能掩盖了算法本身有的简洁性、美感和思想。因而丧失了对算法整体上的一些认识。还拿dijkstra算法打比方,有些算法不是基于dijskstra的直接建模,而是需要你修改这个算法,这时你对算法没有真正理解的话,也就一筹莫展了。


我为什么老说Dijkstra算法,因为确实很多人都只知道用模板,而且模板还不好,在我看到的Dijkstra实现中,只有czyuan_acm的代码写得好。不是说其他的不对,但确实是有问题,投机取巧了的。


所以,要阅读论文和书籍,尤其与英文书籍,窥到它的本质。另一方面,只有这样,你学的的东西才能在ACM-ICPC以外,给你一定的启发——否则你会迅速忘掉它的。


据我所知,035起码阅读了几十篇集训队论文,orzorzorz,而且切掉了例题。


<4>独立思考

这点我也很惭愧,因为我也是缺乏独立思考的。很多题我不会了就去搜解题报告,所以反而我的搜资料能力变得特别强。


035和许多大牛在这点上做的比我好多了,他们遇到题不会的时候,也不会很急于把题目做出来,可能每隔一段时间又拿出来想一次,总有一天想通了,之后这一类型的题目基本上也就没有什么问题了。


而我恰恰比较“虚荣”,做到的题目不会不太愿意想太久,就想尽量快些AC,于是急于看解题报告,这样导致的一个问题就是有些重要的东西解题报告中没有提到,而我也没去想就把他们忽略了,这样,我还是不会做。


我和035讨论问题的时候,我不会一般就直接找他要代码,但是他不懂的时候,顶多问我大体的思路,而绝对不会要代码的。


在去年ACM赛区尾声的时候,我发现035做中难题的能力已经明显超过我一个档次。看他现在做的题目,已然是相当变态,几乎是都100以下人ac,这些题目我看了基本上没什么想法,更要命的时,解题报告也搜不到。


035目前的状态让我想起一个人,不知道大家知道不:wangfangbob,他切bt题的能力也是令人汗颜的。


<5>做有意义的题

1是不要做水题,这里的水题定义为:一眼就能看出做法,而且中途的实现可以预计没有太多问题的题目。

2是做能够强化你最近学到的东西的题目

3你不会但你应该会的题目。

这同时也是在说,某些没太多代表性的题目可以少做,因为对比赛帮助不大。(当然我这个参加比赛的目的很功利,非功利主义者另当别论)


刚才,我把我在poj上的号和他的号对比了下,他ac而我没ac的基本上是难题,我ac他没ac的一般是水题,看得我想哭,5555。


补充一点:ac的人多的并不一定代表着水题,有些几千人ac的题目,在现场赛中ac的人很少,这样的题目往往是有一定思维难度且编码不难的好题,这种题目要认真做,某个学长说:经典的题目啊,只有那么多,做一道,就少一道。


<6>估算好某种训练所需要的时间

我觉得我学网络流就是一个例子,我在大概赛区赛之前2个月开始学习网络流,1个月前开始学习费用流,但是对于我来讲,这两个月培养出来的网络流思维还是不够(虽然也做了不少题),特别是,这种题目往往作为中难的题目出现,不会让你随便水的,于是,北京赛区的那道网络流当时就没有想出来——功利地说,学习网络流没有得到好的效果。


所以,现在来看,当时其实我可以不搞网络流。如果要学一种比较有难度的东西,并且还必须把他搞好,应该较早地,全面地学习,必须长期的训练以培养这种思维。打个比方,如果你微积分平时不学,仅仅考试前一周狂做题目,我觉得上90分是很困难的。

当然,这要根据个人情况而定,我的理解能力应该说是中等水平,如果牛的话应该可以更快地学好。


<7>有关训练的度

我有时候通宵刷体,这里我不知道huicpc035有没有这个习惯,不过我通宵的时候没见到他通宵。

我觉得其实通宵刷体,或者太长时间地做题,还是不好的。我们为什么会这样有热情的做题呢,因为我们有兴趣;但是一个人的成功不仅仅依赖于兴趣,还要依赖于自控。这和打游戏是一个道理,游戏太有趣以至于我们常常通宵——ICPC题目也太有趣,所以有时候通宵。而且很多时候是,由于一道题AC不掉,所以赌气一定要搞定才睡觉,这样一不小心,就通宵了。

其实我明白,通宵不一定效果好,这仅仅说明了你兴趣很高涨而已。通宵往往会打乱你的时间安排,打乱你的生物钟,进而影响你短期或是中期的训练计划。而且,疲惫的状态下做题,你往往只有ac题目的欲望,而完全丧失了ac题目的灵气。所以,我建议,ACMer一定要合理安排作息,能够自控,这样不仅仅对你做ACM-ICPC有好处。




总之,有效训练是很重要,只有通过有效的训练你才能获得你参加这个比赛应得的东西。


还有就是,除了035以外,另一个值得大家学习的就是richardxx——我也很佩服,我并不觉得他是天才,我觉得他以全方位的努力让他自己变得优秀,大家看他的blog可以看到他的学习历程。


最后要说下刻苦训练这一点,这个我主要想说给我们学校的acm队员:

客观的说,我们学校很多名校落榜生(我相比而言是水进的)。确实都蛮聪明的,但再聪明也比不上ACRush吧?人家可是SGU都切满了!ACM不是智力测试,不是你什么都不做就可以天上掉馅饼的。


当然我不是说题目一定要做多少多少道,但如果你觉得你可以一心二用,从概率上来讲,你百分之九十地错了,我是个工科生,我相信概率而非奇迹。


我觉得035这方面也是值得我们学习的,我比较喜欢扯淡,有时候聊题目的时候也经常不小心就去扯其他话题去了,在学习的时候,035是坚决不多聊乱七八糟的东西的,除了讨论上QQ,平时据我观察都是残酷地训练。现在回想起来,我有点后悔,QQ上和网上花掉的时间用来学习新的东西,也许结果会更好。


ACM-ICPC绝不是大学生活的全部,也不是搞算法的全部,你大可以花时间去做其他研究,做项目,或者参加学生工作(我更欣赏那些对人生和职业有良好规划的ACMer);但是,如果你搞ICPC的那段时间你不是全部投入,那的在ACM-ICPC生涯中,将只有后悔。


前几一段时间宁波理工大学举行了邀请赛,huicpc035和他的footman拿到的金奖,在这里先祝贺他,也祝福他今年有更大的突破。


然后,不管以后035是否拿到了更好的成绩,我觉得,对于我们来说,都应该像他学习,做ACM题当如次,做ACMer当如此。

 


http://chatgpt.dhexx.cn/article/ZBbMHyer.shtml

相关文章

ACMer必看的基础算法(附经典例题)

文章目录 一、排序算法1.冒泡排序2.选择排序3.快速排序4.桶排序 二、递归算法三、递推算法四、贪心算法五、动态规划基本模型区间dp背包问题01背包完全背包多重背包 六、分治算法二分三分 七、补充STL的简单应用结构体 一、排序算法 1.冒泡排序 【基本思想】 基本思想为两两比…

反向代理与正向代理区别

正向代理与反向代理的区别 正向代理是客户端与正向代理客户端在同一局域网&#xff0c;客户端发出请求&#xff0c;正向代理 替代客户端向服务器发出请求。服务器不知道谁是真正的客户端&#xff0c;正向代理隐藏了真实的请求客户端。 反向代理&#xff1a;服务器与反向代理在同…

Nginx反向代理与正向代理配置

一、Nginx主要功能 1、Nginx 简介 Nginx是一款轻量级的Web 服务器 、反向代理服务器及电子邮件(IMAP/POP3)代理服务器。主要有反向代理,负载均衡等功能。 官方网站:nginx news Nginx是一款免费开源的高性能 HTTP 代理服务器及反向代理服务器(Reverse Proxy)产品,它高…

如何解释反向代理与正向代理

概念 首先看看说明图&#xff0c;先有一个整体的理解。 正向代理&#xff08; Forward Proxy &#xff09;&#xff1a; 是指是一个位于客户端和原始服务器之间的服务器&#xff0c;为了从原始服务器取得内容&#xff0c; 客户端向代理发送一个请求并指定目标(原始服务器)&am…

反向代理设置

折腾家庭服务器&#xff0c;因只有一个公网ip&#xff0c;还要尝试设置私有云&#xff0c;博客&#xff0c;论坛&#xff0c;以及练习flask编程&#xff0c;又不想写各种端口访问&#xff0c;计划采取的方案是设置一个反向代理&#xff0c;使用子域名访问各个服务。 一、什么是…

知识积累3:什么是反向代理,如何区别反向与正向代理

一直对反射代理的反向不知道如何理解&#xff0c;经过百度知道&#xff0c;再结合下面这幅图&#xff0c;总算弄清楚一点了。简单的说从一个局域网出来到服务端为正向&#xff0c;从客户端要进入一个局域网为反向 概念&#xff1a; 反向代理&#xff08;Reverse Proxy&#xf…

正向代理和反向代理概念及区别

正向代理和反向代理 文章目录 正向代理和反向代理前言正向代理正向代理用处 反向代理反向代理用处 总结(正反向代理的区别) 前言 总是搞不懂正向代理和反向代理应用场景,今天专门来整理一下 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 正向代理 正…

nginx反向代理和正向代理的区别

nginx反向代理和正向代理的区别是什么&#xff1f;下面本篇文章就来给大家介绍一下&#xff0c;希望对你们有所帮助。 什么是正向代理&#xff1f; 正向代理是一个位于客户端和原始服务器(origin server)之间的服务器&#xff0c;为了从原始服务器取得内容&#xff0c;客户端向…

Nginx正向代理与反向代理详解

一、介绍 实践中客户端无法直接跟服务端发起请求的时候&#xff0c;我们就需要代理服务。代理可以实现客户端与服务端之间的通信,我们的Nginx也可以实现相应的代理服务。代理分为正向代理和反向代理,此文就来演示一下Nginx配置正向代理和反向代理的场景。 二、正向代理和反向…

正向代理与反向代理的理解以及区别

正向代理与反向代理 参照了知乎以及百度的一些列子&#xff0c;以下说一下自己的理解 - 正向代理 先搭建一个属于自己的代理服务器 1、用户发送请求到自己的代理服务器 2、自己的代理服务器发送请求到服务器 3、服务器将数据返回到自己的代理服务器 4、自己的代理服务器…

nginx正向代理+反向代理

目录 Nginx工作原理及模块介绍​​​​​​​ Nginx原理 负载均衡反向代理 Nginx WEB服务器最主要就是各种模块的工作&#xff0c;模块从结构上分为核心模块、基础模块和第三方模块&#xff0c;其中三类模块分别如下&#xff1a; 核心模块&#xff1a;HTTP模块、EVENT模块和…

Nginx 正向代理和反向代理

博主介绍&#xff1a; ✌博主从事应用安全和大数据领域&#xff0c;有8年研发经验&#xff0c;5年面试官经验&#xff0c;Java技术专家✌ Java知识图谱点击链接&#xff1a;体系化学习Java&#xff08;Java面试专题&#xff09; &#x1f495;&#x1f495; 感兴趣的同学可以收…

什么是正向代理和反向代理

什么是正向代理和反向代理 1. 正向代理2. 反向代理3. 两者的区别 1. 正向代理 正向代理隐藏真实客户端 正向代理&#xff0c;就是一个位于客户端和原始服务器之前的服务器&#xff0c;为了从原始服务器取得内容&#xff0c;客户端向代理发送一个请求并且指定目标&#xff08;…

nginx--正向代理、反向代理及负载均衡(图解+配置)

目录 学习背景一、代理服务二、正向代理1.1 什么是正向代理&#xff1f;1.2 如何实现nginx正向代理&#xff1f;1.3 客户端访问&#xff08;验证正向代理&#xff09; 二、反向代理2.1 什么是反向代理&#xff1f;2.2 nginx实现反向代理 三、负载均衡3.1 什么是负载均衡&#x…

正向代理和反向代理详解(纯小白必看 最好懂的白话文教程)

概要 习惯性的bb几句 本文主要介绍正向代理和反向代理的区别&#xff0c;如何区分&#xff0c;各自的好处&#xff0c;还有一些应用场景 主要是白话文的内容&#xff0c;不会有太多专业术语&#xff0c;主要是面向纯小白&#xff0c;做个解疑&#xff0c; 部分地方稍微不严谨&…

nginx代理(正向代理和反向代理)

正向代理 是一个位于客户端和原始服务器(origin server)之间的服务器&#xff0c;为了从原始服务器取得内容&#xff0c;客户端向代理发送一个请求并指定目标(原始服务器)&#xff0c;然后代理向原始服务器转交请求并将获得的内容返回给客户端&#xff08;目的是为了保护客户端…

反向代理是什么意思?正向代理和反向代理的区别是什么?

一文说清楚正向代理与反向代理的区别 什么是正向代理&#xff1f;什么是反向代理&#xff1f;它们的区别是什么&#xff1f;看完本文就清楚了… 首先&#xff0c;从字面上理解&#xff0c;代理的意思是代替办理&#xff0c;就是一方委托另一方办事&#xff0c;在计算机网络的世…

正向代理和反向代理有什么区别?什么是正向代理?什么是反向代理?正向代理和反向代理详解。

一、正向代理&#xff1a; 当用户想访问某一网址时&#xff0c;用户先访问代理服务器&#xff0c;然后由代理服务器向目标网址发送请求最终将数据返回代理服务器&#xff0c;最后代理服务器将数据返回给用户这一过程我们称之为正向代理。 正向代理它代理了客户端&#xff0c;相…

正向代理和反向代理的区别

套用古龙武侠小说套路来说&#xff0c;代理服务技术是一门很古老的技术&#xff0c;是在互联网早期出现就使用的技术。一般实现代理技术的方式就是在服务器上安装代理服务软件&#xff0c;让其成为一个代理服务器&#xff0c;从而实现代理技术。常用的代理技术分为正向代理、反…

详解正向代理与反向代理

1.正向代理 1.1 概念 正向代理是一个位于客户端和目标服务器之间的代理服务器&#xff08;中间服务器&#xff09;。为了从目标服务器取得内容&#xff0c;客户端向代理服务器发送一个请求&#xff0c;并且指定目标服务器&#xff0c;之后代理向目标服务器转发请求&#xff0…