一位ACMer过来人的心得

给刚入坑的ACMer一些编码建议(1)——使用“好”变量名 分享三年ACM生涯的一些经验、看法、教训等,希望能给新人一些帮助。 阅读详情

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

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

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

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

我们训练的目的是什么?我觉得有四点
1、提高编程能力
2、学习算法
,(读书,读论文,包括做一些题目验证)
3、准备好面临将到来的挑战(熟悉题型,调整心态)
4、启发思维。

这里四个目的,从训练的角度上,重要性逐次递减;为什么呢?
因为前面的因素是后面的基础。而是后面的目的,想达成越为不易。我觉得前3者能保证你ac掉你能做的题,即使难题始终不会做,也可以ac掉中等偏难的题目。

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

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

对于算法,我发现,很多我们这样的弱校ACMer选手没有侧重好算法的学习。
下面要讲的几点,可能都很老套,但我想以035(huicpc035)对比我自己的例子给大家做说明。

<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生涯中,将只有后悔。

ACM总结体会 1.感想:    在大一下学期的算法基础学习中,毫无疑问,自己的代码水平以及思维深度都有了显著的提高。虽然刚开始做题的时候会感觉到有些无从下手,有时甚至一道题那过来,就会感到头脑毫无思路,这是很正常的一件事,但是记住一件事:不要回避,回避只会令自己更加懒惰,当你全身心的投入到算法知识的海洋中去的,你会感叹原来“哦,原来三分算法可以用到现实当中无人驾驶汽车拐弯技术中去啊”,“原来最小生成树可以跟某 阅读详情

相关推荐

《点云处理算法》——GROR配准

GROR点云配准

阁楼 1315

ACMer是程序员中的特种兵

ACMer是程序员中的特种兵 随着人工智能的日趋火爆,算法工程师的岗位也红火起来了。 全国的程序员有几百万人之众,算法工程师的总需求量应该是不足一千人。 每年的需求量更是不足百人。 这是为ACMer的预备的。而且是ACMer中的得奖的,有好名次的人准备的。 ACM的刷题工程是最烧智商的,没有个130,150的高智商,请自动退出。 线段树,并查集之类的数据结构,应该是无师自通的,至少看过一遍就得完全领 悟能够灵活应用了。 觉得自己智商还够的,请见下文。我六年前开始搞ACM从此踏上了不归路 ...

红孩儿编程大师 3382

Nano Banana 2哪里使用?Nano Banana 2提示词合集和使用教程

收集最强的Nano Banana 2提示词合集,以及Nano Banana 2哪里使用的教程,并且有10个免费使用渠道。

qq_42927225的博客 1988

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

转载自 简单de数字 最终编辑 fading_code by   zfy0701 本来以为HNU的huicpc035和我一样退役了,后来听说他组成了新的footman队,于是又关注了下他。 035体现了两个我觉得非常重要的品质: 1、刻苦的训练 2、有效的训练 (本文将主要讨论个人训练,不讨论团队合作) 而这些品质对于我们弱校ACMe

taozifish的专栏 7191

ST-LINK调试原理与STM32硬件连接实战指南

嵌入式调试器是连接开发环境与物理MCU的核心枢纽,其本质是基于ARM CoreSight架构的实时硬件观测与控制接口。它通过JTAG或SWD协议访问内核寄存器、内存及外设,实现断点、单步、内存监视等深度调试能力,远超简单程序烧录功能。ST-LINK作为主流ARM Cortex-M调试器,支持SWD(2线)与JTAG(多线)双模式,在电平匹配、复位控制、引脚复用规避等硬件层面临关键工程约束。掌握VREF参考电压配置、nSRST硬复位接线、调试引脚隔离策略及Keil MDK调试会话配置,是保障STM32稳定联机

weixin_42596214的博客 312

Simscape Multiboby学习笔记1——跟着官网学Multibody

文章目录一. 引言二. Simscape Multibody自学之路三. 本教程的目录 一. 引言 最近在倒腾Matlab的动力学仿真,起因是看到有人推荐Matlab的multbody模块,一经了解之下简直惊为天人。作为一名Matlab的小粉,看到这么好用的模块简直不要太开心,之前用simulink搭飞行器的仿真模型,虽然能够仿真看到六自由度位移,毕竟不能可视化,还是很不够直观,而且simulink仿真(以及更费力的脚本文件仿真)需要精确建模,模型不精确计算也是天差地别。而Multibody在具备其他动力学

qq_30267617的博客 8241

一个打了三年的ACMer总结

首先要感谢qwb和胡老师把我拉入坑,让我大学过得这么充实~ 本人作为csust的ACMer,零基础入坑,大三拿了个金,大四划水退役。 大一上 刚入大学的我还沉迷于LOL,整天想着上王者,这时碰巧在ACM社团群中划了划水,就被qwb拉入了坑= =。由于起步比较晚,高中也没有搞过OI,进度特别慢,到了第一次周赛的时候,甚至连多组输入都不会写,被各位同级的吊打。品尝到大学首次失败后,我就立了个神奇...

十分残念的博客 1万+

RK3588与FPGA高速PCIe通信:从理论带宽到实战优化的全流程解析

本文深入解析了瑞芯微RK3588与FPGA之间基于PCIe Gen2的高速通信全流程。从理论带宽计算(约1640MB/s)出发,详细拆解了硬件连接、驱动加载、DMA配置等关键步骤,并重点分享了中断优化、内存管理及高级调优等实战技巧,旨在帮助开发者从“跑通”到“跑好”,实现接近理论极限的稳定高效数据传输。

weixin_29175469的博客 332

[置顶] 一位ACMer过来人的心得

刻苦的训练我打算最后稍微提一下。主要说后者:什么是有效地训练?        我想说下我的理解。        很多ACMer入门的时候,都被告知:要多做题,做个500多道就变牛了。其实,这既不是充分条件、也不会是必要条件。        我觉得一般情况下,对于我们普通学校的大学生,各方面能力的差距不会太大,在这种情况下,训练和学习的方法尤为重要。        其实,500题仅仅是一个标

ONE MORE TRY 975

华为OD机试真题 新系统2026-04-01 Python&JS【计算数列位置N的值】

如果其前面的M个元素中,存在值相同的元素,则该位置上的数值等于前面M个数中最大的数值与最小的数值之如果其前面的M个元素中,不存在值相同的元素,则该位置上的数值等于前面M个数中最大的数值与最小的数值之差;1、输入M、N两个数,则按照以下规则形成一个数列;两个整数,用逗号分割,分别表示M和N。一个整数,表示数列第N个位置上的数值。2、数列的前M个元素的值为1到M;请计算该数列第N个位置上的数值。N取值范围:1<= N<=50。M取值范围:3<=M<=10。

MISAYAONE的博客 3222

Level 4自动驾驶系统设计49——L4 架构设计 2

在 9.3.2 节所述的 SerDes 晶圆级原生“双出(Splitter Mode)”物理架构中,若解串芯片内部的其中一路 MIPI 供电轨因大算力 SoC 1 的高热漏电流污染突发二阶瞬态电磁耦合,导致双出通道产生 $\mathbf{\Delta} \text{Skew} \ge 15\text{ps}$ 的时序偏置。其中,$\mathbf{H}(t)$ 为最低限度生存网雷达几何测量的观测矩阵,$\mathbf{R}_{\text{fallback}}$ 为清洗后的雷达测量不确定度协方差。

Godspeed_zwh的博客 309
上一篇: UVa 10048 Audiophobia(最短路&Floyd)
下一篇: POJ 1258 Agri-Net(MST)
synapse7
博客等级 码龄14年 432粉丝 701原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值