ACM有什么用
从功利的角度上说,ACM是有用的:可以算作竞赛,拿到了奖可以加分;对于有着自己职业规划的计算机(很多非计算机的)dalao来说,摘金夺银进WF,是打开谷歌、百度、阿里等公式的好的一块敲门砖。对于我这种大四还在打铁的小垃圾来说,ACM教会了我什么?学到了什么?
提升自我的思维,ACM是很有用的:博弈论、数学思维,很多题目考察的是读题能力和思维能力(比如CF的div2的ABC题,一般都不会涉及算法),思维是自己的,不要总是被各种框架所局限住。
提高分析能力和建模能力。如果说简单思维题是铜牌银牌题目的话,那么所谓的中档题就是银牌金牌题了。根据自己学过的算法和数据结构,根据题意,来对应上各种框架和模型,分析综合能力是不可少的
提高英文的阅读能力。说实在话,除了ACM和学校布置的作业和听英文歌,到了大学真的没有好好的学过几分钟英语。把英语当作一个可靠的工具,那必须每天坚持有接触,每天去学习,把英语真正当作自己的爱好。尤其对于计算机专业的孩纸来说,英文是必不可少的。需要学习英文文档所介绍的各种软件也好,配置也好来完成自己的工作
如果是计算机专业的同学,ACM是还培养了这样一种能力:debug!错误是程序员职业生涯浪费时间最多的一部分,不可避免的话,就需要程序员来好好的静下来调整。ACM给的环境是在压力下编程:别人放气球,自己wrong answer的情况,逼着自己好好静下心来做题。不要放弃是ACM赛场的最重要的原则,没有之一。
ACM为什么没用
我自己作为一个计算机行业的人,如果不是对ACM感兴趣,其实ACM对我来说,是没有什么用的。很简单:算法和数据结构在写项目之中基本用不到。在我目前对计算机行业的浅显了解之中,需要并且真的需要ACM经历的就两个行当:算法工程师(主要是做大数据和云计算方面的,真正需要去做算法优化,从O(n^2)降到了O(nlogn)是有实际作用的),安全工作者(ACMer写的代码一般为了求快,都是只求自己懂的格式,变量名a,b,c这种太常见了,相当于自己加密混淆了源代码,安全工作者需要从其中来找到某些安全问题,就像CF的Hack环节,自己出Hack数据去找别人程序的问题)其他行业,由于计算机的处理比较快了,我们考虑的大都是如何开发更快,更针对用户,即:面向对象的编程。而python、ruby这些语言的出现,让编程更适用于程序员的功能化。效率什么的,确实重要,但是程序员的第一步想的往往是先实现,先做出来个框架
ACMer的思维是:这个题我应该怎么样以最优的方式去搞(如果时间不优会超时空间不优会爆炸)而且还要好实现(不然wa全场还是不知道哪儿错了)如果在思维范围外面的或者不好写的,或者知道写完之后肯定有bug,就肯定不会去做这个题的
搞开发和打ACM走的完全是两条路子的吧,自我感觉是这样,为什么觉得打了几年ACM,什么还是没学到。因为在工程角度来说,我一个框架都不会,一个语言都不会,学到的算法和数据结构在编程的时候都用不上,也不可能在实际运用之中写一发网络流求一个什么东西对吧
我们应该怎么看待ACM
我仍然坚持自己的那么一点:考试是为了分数,学习是为了兴趣。任何一个东西都是有利有弊,选择上了,不管打什么牌,学到了东西,玩得开心,有了乐趣,比什么都好。引用谷巨的一句话:打比赛不如交友
如何打ACM
可以回到总结的正题上了,作为一个功利的ACMer,我们想的是赛场上拿牌,平时多出题,减少错误的次数和时间,多学习是一部分,技巧和方法也是很重要的一部分
1.首先是认真读题:题目中的每一个单词,每一个样例都要搞清楚是什么意思。不要觉得题目铺垫的废话多就省略几段不看,很多题目坑点就是在读题,在某个地方藏了一句有用的话,不看就GG
2.然后是认真分析样例:像青岛网络流那个题,题意其实不是那么明白:相信有很多数学计算方法去算出那个0.5,但是到底哪一种思路和计算方式是题目中描述的,就必须好好读题和分析样例。其实1和2是读题中的一个步骤:因为我们的惰性,是习惯满足于第一印象的!!!第一印象!!!当你对题目大概看过之后,如果没找到细节,自己YY找到了一种计算样例的方法,而且恰好是对的,很有可能进入了出题者的陷阱,就会不断的去找自己的代码中有没有bug!!!不管代码中有没有bug,都是不可能AC的!!!因为,你看错题了。。。再次强调,读题和样例的重要性
3.怎么1A?与其不断的查bug,debug,还不如一开始就1A(废话谁不想1A)做题的第一个原则是:如果我有细节没有想清楚我不写,如果有边界数据没想好怎么处理我不写(我自己是急性子从来没按这个走过,但是逼着自己这样还是有用的:道理很简单,从全局考虑完毕之后再来考虑实现细节是很快的,尤其是DP!初始化+状态转移就是全过程代码)
4.如果不幸错了(这不是很正常)怎么debug!三个步骤:首先,再次看题意!看样例!确定自己做的题目就是这个题目(没有理解错题意)然后,梳理自己的思维,是不是某个地方在实现的时候,偏离了自己的整体思路框架,而且运气好,过了自己的样例;第三步,如果是wa,那么一定要用数据说话,拿边界数据大数据特殊数据来Hack自己,一般情况下,不要去质疑评测机器,肯定是自己的问题,静下来分析
5.遇到模拟,数学,思维题目怎么办?(江湖俗称XJBG)的题目怎么办?打表也好,猜测答案也好,从样例中推规律也好,总之不要想着一下把答案看出来。拿博弈论来说,赛场上三个人对吧,哪怕两个人真的来玩这个游戏,从小到大,基本能找到规律。对于模拟题(2016青岛B题魔方题)目标一定要准确的追求1A:道理很简单。如果不是1A:我擦,这么简单的题我TM的哪儿错了,然后瞎debug一发然后就会回来继续提交,直到把自己心态打爆炸,要么wa到死,要么wa到过了但是罚时爆炸。与其这样,不如一开始把所有的情况考虑清楚,哪怕考虑1个小时再写,相信20分钟之内肯定敲完了
送给所有ACMer:
ac everyday,at least today.
ac everyday,not only today.
Seize the day.
还有我kuangbin大神的:
ICPC欠所有ACMer一个world final
人一我百,人十我万!追逐青春的梦想,怀着自信的心,永不放弃!