Skip to content

大学-我与ACM的缘分

icpc-logo

时间总是过得很快,2014年才刚刚进入大学,转眼间便已然成为一名大三学生。

记得自己上大学前很喜欢看网络小说,对其中所描述的学院生活感到非常向往,父母亲戚在劝诫我不要打游戏时,也常常用上“游戏这种东西上了大学随你打”这类话。因为没有体验过,又因为人们口中的大学生活非常符合我对享乐生活的设想,所以我就把大学当做了一个非常美妙的“天堂”。

而刚上大学的那段时间也确实如此,我喜欢大学自由的上课风格,喜欢寝室无约束的玩游戏环境,也因为远离父母,终于有一种解放的感觉。可人总是有点“犯贱”,以前爸妈不让我玩游戏,我偶尔能玩一会感觉到非常满足,而现在任我玩时,我反而渐渐觉得有些无聊。玩游戏玩到无聊,所以注意力就开始转移到其他地方。我想起了初中时曾经买过c++书籍(虽然就翻了几页,而且还是谭浩强叫兽的),想起了编程这个玩意,所以就决定研究下编程。当时个人对C++这门语言比较认同,所以就准备先去图书馆借C++的书看。

先去网上找了找,大牛们推荐了《C++ primer》这本书,于是我去图书馆借本来看看。去了图书馆后,发现这书已经被人借光了,而空闲的只有《C++ primer plus》。我一看这书好像差不多,而且还加了个plus,好像很高端的样子,于是就开始读这书。这可以说是我的编程启蒙书。这本书看起来只加了plus,但和原来要的那本书可以说是天差地别。plus开始从C-style代码讲起,后面讲再单独讲C++内容。当时我看完C部分就感觉差不多,准备去小试牛刀。在偶然中和一个教编程的老师聊天时,我还非常自信的说“C++其实就是C加一点面向对象的东西”。现在想来,当时的自己不可不谓狂妄自大。C++和C其实可以说是两种风格差异巨大的语言,只是C++兼容了C的内容。

在这之后,一个学长向我推荐了学校ACM的教练,我通过电话并线下到办公室和教练陈老师聊了聊。陈老师给我介绍了计算机能做哪些有趣事情,并介绍了HDU_OJ,并让我去刷一下11页的题目。

我对其中说的一个简单例子印象很深:计算机能完成找迷宫出口。对这件事情我感到很困惑,当时的我知道编程里面有循环、判断语句,还有函数调用,但为什么就这些简单的东西就能完成迷宫中找一条路呢?当时没想出来,后来也因为新生的事情多,把它抛在脑后。

事实上,当时的我其实还什么都不会,11页这个任务也就有空去做一做,没空就拉倒。就这样一直到了大一上结束,我突然发现有很久没和陈老师联系了,于是自己又厚着脸皮跑办公室去找了陈老师。陈老师告诉我,寒假有ACM集训,你可以来参加一下。我一听觉得不错,就答应了下来,就这样,我第一次开始了ACM集训。

第一次集训,给新生讲了搜索的内容。搜索正是能解决迷宫找出口的方法,于是自己仔细听,却发现没怎么听懂。做习题时,别的大一同学都飞快做完5、6道题(zzt,xiang578),我却只能为了1道题而苦苦努力。当时第一次接触到了递归这个概念,也知道了回溯,但对搜索还是不能很好理解。人笨只能用笨办法,自己对着一份搜索代码只能实行单步调试,一步步看递归是怎么回事,为什么dfs在回溯时需要清除清除标记,一道“骨头的诱惑”能让我思前想后始终不得纲领。寒假集训还讲了些其他东西,但具体是什么依然记不太清,但自己对于搜索(或者说是递归)还没有入门。

集训结束后,我坐上了回家的高铁,顺手拿出了图书馆借的《挑战程序设计竞赛》翻了翻并仔细看了下汉诺塔(Hanoi)的过程。或许有些事情就是这么水到渠成,寒假集训半月始终不得要领的递归,在看完汉诺塔讲解以后突然一下子就明白了递归是怎么回事,同时也感受到了递归写法的简洁和强大。火车上只有短短的一小时,但这一小时的顿悟给我彻底打开了编程世界的大门。

OLYMPUS DIGITAL CAMERA

OLYMPUS DIGITAL CAMERA

关于编程,其实我在学算法的时候比学数学抱有更大的热情。数学的推理非常美妙,但也只局限在一个小圈子里的人能看得懂。而编程这个东西可以把我掌握的东西通过程序实现出来,当实实在在的东西出现在电脑上时,我收获的是巨大的成就感,或者说,我能确切感受到我也改变世界的能力。

在这之后,我加入了校ACM集训队,并参加集训。寒暑假教练会在vjudge上拉比赛,平常会安排时间找人讲课,就这样,我大学除了上课,周二下午公休在集训,周四下午公休在集训,周日一天集训,周六一般也会跑去机房写题,人生被ACM充斥了大量时间。在这期间,我也认识了许多集训队的小伙伴,zzt , xiang578 , wtq , godWang 等等。 (Continued)

git同步Github和Coding代码

最近开始习惯把平常写题的代码用git进行存储,并同步到远程仓库。

很自然,远程git仓库的第一选择就是github,但由于各地网络环境不同,有些宽带连接github速度并不理想,于是,我选择将我的git远程仓库放置在了对国内用户更加友好的coding.net上(以前是gitcafe)。速度的问题解决了,然而人们其实更多还是喜欢去github上看一个人做的东西,于是,我决定把我的代码从coding同步到github。整体一次性同步过去当然很简单,但我想的是如何能在我每次向coding上push的时候,github里也同步push,于是去网上搜了下解决方案。

github里已经有自带hooks功能,只要把这个脚本稍微配置下就是可以实现,但同时,我发现还有个更简单的方法。由于我使用的是Ubuntu,所以以下例子以Ubuntu操作为例,其他系统类同。

首先进入你自己git的Repository文件夹下,然后使用

l -al

指令查看所有文件,发现有个隐藏的 .git 文件,进入后继续list可以发现有个config文件,编辑它。

git_config

你可能会看到类似上面的内容,有些内容可能不大一样,不过不影响。观察一下我们可以发现,以前我使用推送到远程库的指令是

 push origin master 

在[remote “origin”]中 出现了我推送到coding.net的地址,于是很自然的,其实我只要在这下面加上我推送到github上的url就可以了,我自己是是把单独推送到github上使用hub指令,然后一起同步使用了all,以后每次push时,github和coding会被同时更新,是不是非常方便。

 

2015 EC-FINAL 小记

ec1

双十二征战上海,参加ACM-ICPC ec-final。先说点相关背景吧。

这场可以说是中国区的总决赛,由于我们学校一队退役,所以老师选了我们队和另外一队去参加比赛。

时隔六个月重新征战上海,依稀还能想起上次是在华东理工大学参加上海邀请赛。那是第一次参加区域赛,对所有东西都感到很新鲜,而且那次我的队有一个大牛,所以我除了翻译题和想简单思路外,也没有提供很大帮助。这次来到了上海大学,终于是作为队伍的主要输出之一参加比赛,内心感觉非常不一样。

本场比赛汇聚了中国ACM界最顶级的神牛,各种强队全部来到了现场,许多我在网络上膜拜了很久的神牛终于一睹真容。不过,学校订的宾馆有点坑,离比赛场地远不说,个人觉得卫生情况不是很理想,所以休息情况只能说一般,外加上比赛那几天我恰逢感冒,所以人一直有点晕晕的。

Timeline:

周六上午一大早起床坐火车到了上海,然后地铁辗转到了上海大学。 (Continued)