楼塔当天领袖acm心理(做为励志使用)

楼主我的博客:吉尔博客html

假期空闲的时候使用。这些年来GCJ。ACM,TopCoder 的一个号码的一重要的比赛的参与
回顾。GCJ2006 的回顾,今天时间上更早一些吧,我现在还清晰记得3 年
前。我刚刚參加ACM 时參加北京赛区2005 和杭州赛区2005 的状况。
2005 年ACM-ICPC——酸甜苦辣
我进入清华大学開始本科学习的时间是2004 年8 月,在进入清华大学的第一
年里,由于基础课学习比較紧张。再加上计算机系不一样意大一学生自带电脑,我没
有參加2004 年的ACM 比赛。只是在大一一年中没有中止这方面的练习。对ACM
仍是热情高涨。
大概在2005 年7 月底。与同班同窗shell(贝小辉)和superzn(张宁)一块儿
决定组队參加ACM 比赛。对于队名没有太多的想法。就随便取了一个字典序靠前
一点的bomber。随后进行的几场训练中,个人编程状态一直保持得很是好,训练比
赛的主要方式都是:我主写程序。shell 和superzn 负责翻译题目,思考算法和測试。
这样的组队模式一直沿用到咱们后面的所有比赛中。node


2005 年末。咱们报名參加了2005 年的北京赛区和杭州赛区的比赛。顺利经过
了预赛进入了现场决赛。记得当时北京赛区预赛的时候。我和superzn 一块儿在參加
百度之星程序设计大赛,shell 依靠一人之力过了6 题,最后以第二名的资格參加
北京赛区现场比赛。算法


北京赛区:
2005 年的北京赛区地点设在隔壁的北京大学,由于交通很方便,咱们没有
和大部分选手住在一块儿,只是也没有參加Java-Challenge 和晚上的表演。shell


练习赛以前,说到比赛位置抽签,自己意义不是很是大,可是邬老师奇妙的RP
把两仅仅清华的队伍抽在一块儿,结果练习赛进行了一半。还有一仅仅清华的队伍THU1
(队员是:吴景岳,栗师和金凯,好像后来队名改为了DreamCatcher。不是很是确
定)被要求换到一个比較远的地方。理由是有些学校认为这样不合理。编程

后来很是多赛
区也出现过队伍座位在一块儿的状况。邬老师的RP 果真不是盖的。数组


记得练习赛时和复旦的LemonTree(盛城)一块儿在场地里闲逛,结果果真不到
10 分钟就被要求回座位了。网络

还有当时比赛场地是一个体育馆,有些队伍把气球放
飞以后气球就飘在天花板下了,总裁判李文新老师还威胁咱们说,假设明天正式比
赛把气球放飞,就不算经过对应的题目,除非有办法把气球取下来。app


而后就是比赛的过程了,如下有底纹的文字是我找到的当时留下的比赛总结:
E:高速排序。5 分钟1Y。
我想5 分钟的时间可以争取这几年ACM 国内赛区的最快出题记录了吧。
G:二分答案+最小生成树。25 分钟1Y。框架


这题就是经典的最优比例生成树问题,咱们一致以为这题比較简单。只是后来
被李文新老师批评了,说法是误导其它的队伍。只是说到最优比例生成树问题,
TCO2006 的时候fwj 和tomek 竟然都没有见过这道题目,这题可是源于POI 呀。dom


想咱们以为这道题目简单的主要缘由是咱们都在冬令营上见过这到题目,假设第一
次看见,想出算法可能确实需要一些时间。在这里向被咱们影响的队伍的道歉,最
终G 提交了200 屡次。但是仅仅有8 个队伍AC。


C:二分图最大匹配。

42 分钟1Y
题目要求计算一张图的最小覆盖集,可能惟一的tricky 是发现图是二分图。


D:遇到了必定的困难。发现A 很是easy,因而先放一下
D 是一道比較综合的题目,设计一些简单的计算几何和字符串处理的知识
A:简单的几何问题,出现了一个低级错误,提交了3 次均为WA。
A 是北京赛区最简单的题目,个人程序里犯了一个很是低级的错误,可能也是经
验不足形成的吧。
D:又一次写。但是没有考虑一种状况,WA 了1 次。


87 分钟,复旦的Abuacus 过了4 题占领了Rank1。

由于队伍模式的缘由。咱们
在还有很是多简单题目的状况下卡住了长达30 分钟。


A:shell 忽然发现了A 程序中的低级错误,105 分钟AC。又一次夺回Rank1。
这是很是重要的一步,现在想来假设没有这个发现,后果可能不堪设想。


B:二分答案+2SAT。129 分钟AC。
B 是一道明显的2SAT 问题。由于题目比較长,咱们没有很是早发现这道简单题。
D:发现了D 的没有考虑的状况。140 分钟AC。
看了一个board。那时Abuacus。Eccentric 都仅仅有4 题,能够在第一次參加正
式比赛就作到6-4 的率先,当时心情很是激动,只是由于缺乏经验,也影响了接下来
的发挥。

事实上。现在回忆起来,此次比赛事实上是一个很是好的AK 的机会。
F:DP。程序比較复杂,WA 了4 次。
F 是一道比較复杂的动态规划的题目。事实上WA 的缘由是一个应该用int64 的
地方,咱们使用了int,这个地方的确很是难发现。
H:F 一时没法AC,仅仅好转功H。H 就是普通的模拟题。

開始没有考虑坦克和
炮弹可能在1/3 秒相遇,WA 了1 次。


比赛另外一个小时,封板。
H:shell 发现了坦克和炮弹可能在1/3 秒相遇的状况。250 分钟左右AC。


对于咱们这样的组队模式。当主敲代码的选手状态很差的时候。很是easy出现连续
卡题的状况,这样的状况的出现很是不利于水平的正常发挥。

在北京赛区的比赛中,我
们很是有幸没有出现连续卡处的状况。
记得。当时北京赛区的Judge 的半本身主动的。就是说假设结果是AC,速度就会非
常快,不然由于人的介入,不能AC 的提交每每需要等一段时间。

咱们第2 次提交
H 以后。没有获得很是快的回复,觉得已经WA 了,因而我和superzn 继续測试一些
数据。但此时,忽然有一个mm 从左边走过来插气球,这个气球也成为了全场惟
一的蓝色气球。这个意外之喜最后成就了第一个分区赛冠军。
F:如下就是痛苦地提交F,一直战斗到最后一刻。WA 了14 次,留下了北京
赛区最大的遗憾。


在最后时刻咱们彷佛发现了那个int64 的错误。只是当时思路已经比較混乱了。
没能改对。

F 的问题也致使没有时间写I,当时假设直接重写后者换superzn 来写F,
全然可以在比赛结束前AC。
比赛的大体过程如上所述。那个奇妙的气球。我现在仍然记忆犹新。终于有4
个队伍攻破7 题,Abacus 的组成应该是盛城。timegreen 和suzhan 吧,Eccentric 中
我仅仅记得辛韬,ZSU_Panku 中我记得Savior(陈实)。上述的老朋友以后见面的机
会就很是少了。分区比赛也成为了我好需要老同窗重要的交流机会了。
我ACRush 的ID 预计就是那时開始使用的吧,转眼就已经3 年多了。
比赛先后还记得经常与复旦大学的吴永辉老师聊天,在那以后的每次比赛我都
能见到他年轻的身影。
现在回忆起北京的分区赛。很是有幸能够在第一次參加ACM 正式比赛就得到分
区比赛的冠军。

我想是由于现场气氛对不少队伍都有不小的影响吧。当时不少队伍
都卡在几道比較繁琐的题目上了,题目的算法性都不是很是强。我大概从那时才刚刚
接触TopCoder,假设能够早一些,相信会更适应这种比赛。
杭州赛区:
2005 年的ACM 杭州赛区比赛在浙江大学举行,杭州赛区的时间就在北京赛区
结束后一周。最初选择杭州赛区的缘由很是飘逸:我本身家在杭州。实际上也差点儿相同,
我随队伍(当时THU 派了3 仅仅队伍參加杭州赛区的比赛,除了咱们队以外,
b142857(侯启明),zhy(周源),ysy(杨 思雨)组队,另一仅仅由汪汀。王俊
和黄源河组成)一同抵达杭州车站以后就当即回家歇息了,直到比赛前才赶回。在
北京到杭州赛区之间的一周中。个人状态就在 不断下滑,在家中全然失去了比赛
的气氛,回到赛场再也找不到感受了。一场悲剧即将上演。

咱们先看看比胜过程吧,
如下有底纹的文字是我找到的当时留下的比赛 总结:
G:初看很是easy,但是调试了30 分钟没有结果。


G 是一道数学问题,事实上《详细数学》书上有明白的公式,只是咱们使用的递
推方法应该也可以获得正确的结果。程序中犯了一些低级的错误。由于实在不在状
态,调试了30 分钟尚未找到错误。这里还暴露了一个组队模式的问题,在后来
的组队模式中。假设像这样没有想清楚算法的题目队友是必定不一样意我去写的。


A:模拟。

41 分钟AC。当时确定没有想到这是惟一一道1Y 的题目。
A 是一道模拟题,1Y 的时候已经很是晚了,排名也很是靠后。
C:图论。但是由于堆栈逸出RTE 了5 次,浪费了大量的时间。
C 的问题关于树中祖先关心的断定。题目很是简单,实现的方法也很是easy,就是
经过一遍DFS 来计算。但是咱们忽视了一个历来没有遇到过的问题:堆栈溢出。
而且。堆栈在本地机器上执行过程当中,Eclipse 提供了8MB 左右的堆栈。因此没有
溢出。但是在提交以后的环境下执行就溢出了。

而且每次RTE 以后。咱们一直在
尝试改动数组的大小。一直没有找到根本缘由。调试C 的同一时候。我也尝试改动G,
结果G 也错了8 次之多,并且始终都是WA。


I:shell 在我郁闷地调试C 和G 中AC 了。以前WA 了一次。
I 是动态规划问题,WA 一次多是忽视了一些边界状况。


D:网络流,没有想到先贪心进行优化。TLE 了5 次终于没有经过。
D 就是计算最小割,咱们事先准备了先流推动算法。只是依据这道题目的模型。
先流推动算法遇到最坏状况:二分图。由于当时dinic 还不是很是流行,咱们TLE 了
5 次尚未经过。
郁闷地调试D 和G。
E,B:都尝试过,但是都出现了不明的问题。


在随后的时间里,不断调试D 和G。但是始终不能AC。

以后又尝试E 和B,E
经过分段的方法可以处理,B 是数学题目。正常的话E 和B 并不是很是困难的题目,
但是当时已经很混乱,连例子都没有经过。


终于咱们仅仅过了3 题,排在21 名,经历了我參加ACM 以来最慘痛的失败。
此次失败主要归过与我状态太差。基本上什么题目都不能顺利经过。固然题目的选
择也有很是大的问题:G 确实不是难题,但是由于未知的缘由始终不能经过,后来我
把纸上的程序敲在ZJU 上就AC 了。至于现场为何不能AC 我现在仍是不能明确。
假设说第一题的选择直接影响了咱们的信心。那么D 的堆栈溢出则全然打乱了我
们的节奏。对于咱们的组队模式,卡出2 题已经超出了极限。咱们不可能再尝试
其它题目。
Abacus 也来到了杭州,他们前期体现了强劲的先期优点。在2 小时就达到了6
题;b142857(侯启明)。zhy(周源),ysy(杨思雨)的队伍表现得至关神勇,
在最后一小时超越了Abacus,夺得了冠军。
杭州赛区的失败至今还是心中痛苦的回顾。只是这个教训也是对我从此的学
习生活的一种警示。
总结:
2005 年是我第一年參加ACM-ICPC 的比赛,两场ACM 分区赛,咱们经历了夺
冠的兴奋,也经历了环顾四周等待比赛结束的无奈。2004 年清华没有得到不论什么分
区赛的冠军。2005 年清华打了个美丽的翻身仗,前后在成都,北京和杭州夺得冠
军,而且是三支不一样的队伍。
两个赛区的G 都是有传奇色彩的题目。北京赛区中。咱们25 分钟1Y 了G,
致使不少队伍跟风失败。终于达到了208 提交8AC 的低经过率。但是,杭州赛区
中,G 从比赛一開始就占用了咱们大量的时间,直到最后都没有经过。预计至少浪
费了两个小时左右。

真所谓成也在G,败也在G。
北京赛区后。POJ 的论坛上传闻说我之前说过“起身去厕所,不准碰键
盘。。。

”,很是仰慕那些同窗搞笑和扯淡的功底,咱们尽管定下了以我主敲代码的
组队模式,但是也很重视配合和每个人在队伍中的重要做用。
当时清华没有组织校内PK 选拔,选择了成都赛区的冠军队THU1 參加全球
决赛。当时总决赛队伍是以參考第二赛区的成绩决定的,现在回忆起来也是很是合理
的。由于终于咱们未能获得机会參加全球总决赛。接下来几个月咱们情绪低落,
bomber 从那时也就宣布解散了吧。
2005 年的比胜过程中,我见到了许不少多的老朋友。用吴永辉老师的话,
ACM 竞赛可以看做一些老朋友一块儿进行的一场智力游戏
附北京赛区前5 名:
1 Tsinghua University=>bomber First Place 7 788
2 Fudan University=>Abacus Second Place 7 983
2 Shanghai Jiao Tong University=>Eccentric Second Place 7 1084
3 ZhongShan (Sun Yat-sen) University=>ZSU_Panku Third Place 7 1194
4 Peking University=>Monkey King Fourth Place 6 768
找不到杭州赛区的排名了,仅仅发现了这个:
21 THU *bomber3 501 1/41 0/-- 6/197 5/-- 0/-- 0/-- 8/-- 0/-- 2/143 22
谢谢韩家龙同窗的热心帮助,找到一个排名的连接是:
http://acm.zju.edu.cn:8080/icpc2005/ranklist/index.html
利用假期空暇之时,将这几年GCJ,ACM,TopCoder 參加的一些重要比赛做个
回想。GCJ2006,ACM2005 和TCCC2006 以后, 2006 年对于我来讲是一个大丰收,
今天晚上先回想Mobile Robot 成立先期的事情吧,明天再总结惊心动魄的ACM 上
海2006 和ACM 西安2006 吧。
2006 年ACM-ICPC(上)——Mobile Robot 的成立初期
回顾到2005 年清华没有组织校内PK 选拔,选择了成都赛区的冠军队THU1 參
加全球总决赛,bomber 从那时也就宣布解散了。
早在2006 年初,THU1 准备參加ACM-ICPC 2006 世界总决赛的训练时。咱们的
队伍就已经成立了。队伍其它两名选手是一块儿參加IOI2004 的geworm(鬲融)和
wd.h(胡伟栋)。
Mobile Robot 的组队比赛:
至于Mobile Robot 的队名。咱们是为了记念2004 年4 名參加IOI 的选手第一
次合做的时候使用的账号,假设回到2004 年的PKU 月赛,或许可以看到thmr3191
的身影,这个ID 最初是咱们4 人共同使用的。当中thmr 就是Tsinghua Mobile
Robot 的缩写。固然咱们认为Mobile Robot 读起来也比較easy上口。


Mobile Robot 成立以后作的第一件事情就是配合THU1 准备World Final2006 的
训练,前后模拟比赛了两次Northeastern Europe(NEERC)的题目。这两次训练中,
咱们队伍的主要模式都是:
(1) geworm 全程负责读题。思考算法和出数据;
(2) wd.h 和我在比赛前2 个小时一块儿攻简单的题目;
(3) 2 小时后wd.h 就開始死磕难题。我主敲代码一直到3 个半小时左右,结
合wd.h 对难题的把握,你们開始合攻难题。
这样的拖后中卫的打法。对于NEERC 的题目难度很合适,两场比赛咱们都作
到了AK(全过11 题)。

这样的组队模式也一直沿用至总决赛。当时wd.h 的状态很是
好。对于NEERC 的题目难度,我认为世界上很是难有队伍能够有信心作到AK。
队伍成立初期的顺利使咱们更有信心。咱们利用署假时间进行了一些必要的训
练以迎接2006 年下半年的ACM 分区比赛。
北京赛区预赛——网络赛赛网络:
2006 下半年有3 个国内赛区。包含北京。上海和西安。当中北京赛区最早举
行。

2006 年北京赛区的地点设在了清华大学。这也是我惟一一次參与组织ACM 分
区比赛的机会。
10 月 中旬举行了北京赛区网络预赛。网络预赛的參与者是所有报名參加北京
赛区的队伍。以决定哪些队伍拥有參加现场比赛的资格。那段时间,咱们队伍主要
精力放在了 准备比赛上。咱们都没有參与网络预赛的命题和測试平台工做。由于
清华距离上次承办分区比赛已经相隔很是多时间,直接致使网络比胜过程中出现了严
重的网络问 题,在这里做为清华ACM 队的一员向受到影响的队伍道歉。
不 过,我也是做为“局外人”来了解此次网络堵塞的,因为我确实没有參加
不论什么与网络赛有关的活动。现在回忆起来。我以为平台的稳定性是一个不可推卸的
缘由。但 是主要应该归咎于题目描写叙述和例子的设计,固然还有測试数据的错误。
设想这样一种状况。假设一个比胜过程中。从某一时刻起,忽然添加1000 个提交
需要rejudge,而后所有队伍还都在这一时刻起尝试提交,我想现有的大部分OJ 都
很是难在1 小时以内平息这些提交吧。

再举一个更夸张的样例。假设OJ 准备的測试
机器的測试速度已经全然跟不上提交的速度。那么卡住是不可避免的。

咱们经过网
络预赛的教训总结出一些网络预赛题目的重要经验:
(1) 对于easy上手的题目,測试例子必定要足够强。
(2) 对于简单的题目,必须细致确保測试数据是正确的。


(3) 题目描写叙述必须没有不论什么歧义,避免选手经过提交来不断尝试各类理解。
假设题目能够很是有效控制提交数目,对于測试系统的要求事实上不是很是高。


如复活赛和现场决赛的时候,測试系统会大部分时间处在空暇阶段。

反之,假设提
交处在上述病态的状况下,仅仅有很专业的測试系统才干胜任这种挑战。固然不
包含咱们的測试系统。


总之,对于网络问题我做为清华ACM 队的一员深表歉意。假设还有下一次的
机会,咱们必定努力作得更好。
北京赛区验题赛:
假设说网络预胜过程中。网络出了一些问题。那么,决赛则是结果更出乎我
们的意料以外。在北京赛区现场赛以前几天。咱们3 支队伍进行了验题赛,比赛
尽管不正式,但是过程仍然很是激烈。


先列一下决赛的9 道题目吧:
A. Robot
B. Animal Run
C. Another Minimum Spanning Tree
D. Connect It, If You Can!
E. Guess
F. XAR
G. What a Special Graph
H. Ruler
I. A Funny Stone Game
现场赛仅仅有BEHI 这4 道题目有队伍成功经过。可是在验题赛中咱们队伍的进
程全然不是这样,如下是咱们的作题状况:
22 分钟 A 题。数学方法,1Y
首先,咱们3 支队伍在30 分钟以内都1Y 了A 题。

A 题是一道中等难度的数学
题,可能A 题需要明白高次等差数列的求和公式,而且经过枚举来取代一些若是
可以大大简化问题。

现场比赛时有些队伍作了不对的若是致使始终WA。
记得当时zhuzeyuan 使用了一个奇怪的贪心方法。后来被OpenGL 找到一个反
例。这个測试用例被加入到正式比赛的測试数据之中,这个反例也成为了现场赛中
使得不少提交WA 的关键数据之中的一个。
30 分钟E 题,贪心,1Y
E 是2006 北京赛区最简单的题目,仅仅需要直接的贪心法就可以解决


52 分钟H 题,深度优先搜索。1Y
H 是一道搜索题。题目时限不是很是紧,不需要太多的优化就可以经过。
75 分钟I 题,标准的博弈SG 问题,1Y
I 是标准的博弈问题,经过计算SG 就可以获得结果。这题事实上有一个阴险的
地方。就是当某位置石子为大于0 的偶数时,也需要考虑以保证结果的字典序最
小,好在咱们及时避开了这个陷阱。现场很是多队伍调入这个陷阱中。耽误了一些时
间。
129 分钟B 题,最短路径问题,3Y
B 是一张平面图的最大流问题,由于图形比較有特色,因此可以建图来计算最
小割。但是这张图有106 个点,2*106 条边,最短路径需要用堆来辅助实现,首先
由于数组开小了RTE 了一次。而后由于用map 实现TLE 了一次。这题浪费了不少
时间。
G 题。实现和调试了30 分钟,超时
G 是2006 北京赛区最困难的题目之中的一个,题目描写叙述很是easy。推断一张图是否为
co-graph。咱们算法的复杂度是O(n*m/32)的,只是由于数据个数比較多。程序运
行时间远超过了时限。


C 题,贪心法实现50 分钟。WA
C 题是计算平面图曼哈顿最小生成树。直接计算是O(n2)的。但是题目中n 接
近100000。我使用了一个贪心算法,事实上和标准算法差距不大,只是仍是致使
WA。事实上提早写C 不是很是合理的选择。当时没有注意到D。

C 和G 难度相差无几。


230 分钟F 题。构造,1Y
F 题是很是变态的构造问题,这题全然是wd.h 作的,我至今还不是很是清楚算法。
250 分钟D 题,计算几何,2Y
D 题是一道比較复杂的计算几何,当推断一条直线是否穿过一个多边形的时候
忘记考虑了一种状况,WA 了1 次。现场不少队伍事实上都仅仅忘记考虑了这一种状况。
但是惋惜没有队伍该正确。


这场比赛终于咱们队伍以7 题结束,另外两队也都经过了7 题。咱们所以也
没有改动题目难度,随后让你们没有想到的是:一场极低经过率的比赛即将開始了。
北京赛区现场赛:
现场比赛中。我负责在某一个房间为參赛选手送打印资料。比赛60 分钟左右
由于技术问题到Judge 室处理一些问题。通过5 个小时的比赛。终于中科大
Student 队经过4 题得到冠军,厦门大学btALT 经过3 题得到亚军,北京大学
RPWT,浙江大学gogogo 和合肥工业大学Love Wisdom 也都经过3 题分列3-5 位。
终于Student,btALT 和Love Wisdom 进军总决赛。
回想比赛现场过程。首先让咱们出乎意料的是E,E 是2006 北京赛区中最简
单的题目,贪心法的方法參加比赛的同窗都想到了,可是有一个小小的细节,对于
实数比較大小时,需要增长一个微小量eps 来控制精度。E 题没有加eps 的提交占
到总提交的50%以上。咱们称之为“经典提交”。

这个小tricky 不慎致使很是多队伍
迟迟不能经过第一题。对不少队伍的状态有不小的影响。


其次是A,A 题收到了很是多队伍的提交,但是终于都没有队伍经过A。缘由是
你们作了一些不保证正确的若是,当时咱们都经过枚举的方法避免了这些若是。
另外。有一些队伍提前接触了F 和G,并深深地陷入当中。中科大早在240 分
钟就经过了第4 题,可是以后他们在G 上花费了很多精力,咱们甚至想跑到他们
那里告诉他们G 是最难的。


记得180 分钟到240 分钟,咱们仅仅接收到了不超过10 次提交。每次你们听到
提交的声音。所有Judge 一块儿点鼠标抢測试权。后来,在TCCC2006 上和Ying 提及
此事。据他说和2004 年的广州赛区有不少类似之处。


总结:
祝贺所有得到好成绩的队伍,恭喜Student。btALT 和Love Wisdom 进军总决
赛。并再次对网络赛给你们带来的不便道歉。

后来清华举行了名为复活赛的比赛,
我想复活赛应该就是从那时開始出现的吧?
当年清华一共同拥有6 支队伍,但是仅仅參加两个赛区的比赛,形成每个赛区以前
都要进行小规模PK,终于仅仅有4 支队伍有机会參加ACM 分区赛。Mobile Robot 建
立之初比較顺利,得到了參加两个赛区比赛的机会,迎接Mobile Robot 的将是上
海和西安赛区的挑战。
咱们3 人能够走在一块儿,要感谢吴文虎老师的支持。组队初期尽管没有经历
大战。但是那些快乐的时光至今都很是难忘怀。
附北京赛区排名
1 University of Science and Technology of China=>Student First Place 4 628
2 Xiamen University=>btALT Second Place 3 417
3 Peking University=>KU RPWT Third Place 3 460
4 Zhejiang University=>gogogo Fourth Place 3 471
5 Hefei University of Technology=>Love Wisdom Fifth Place 3 477
6 Fudan University=>Yin-Yang Sixth Place 2 204
7 Tianjin University=>TJU_Rhythm Seventh Place 2 212
8 Beihang University=>L3 Eighth Place 2 254
9 Peking University=>KU4 Ninth Place 2 275
9 Harbin Institute of Technology=>IAC Ninth Place 2 282
10 ZhongShan (Sun Yat-sen) University=>ZSU_Pyrenean Tenth Place 2 288
11 Zhejiang University=>hoebus Eleventh Place 2 311
11 University of Electronic Science and Technology of China=>Gryffindor Eleventh Place
2 319
12 ZhongShan (Sun Yat-sen) University=>ZSU_Himalayas Twelfth Place 2 324
12 Fuzhou University=>OrOrz Twelfth Place 2 412
13 Beijing University of Posts and Telecommunications =>Vitamin Thirteenth Place 2 432
14 Ningbo Institute of Technology,Zhejiang University=>impact Fourteenth Place 2 435
15 Huazhong University of Science and Technology=>rodimus Fifteenth Place 2 442
16 Nanjing University=>HOENIX Sixteenth Place 2 459
17 Fuzhou University=>Laplacian Seventeenth Place 2 467
17 Fudan University=>Shuangwaiwai Seventeenth Place 2 500
17 National University of Defense Technology=>Robust Seventeenth Place 2 517
18 Fudan University=>Free Wings, Yeah! Eighteenth Place 2 518
18 Hong Kong University of Science and Technology=>HKUST1 Eighteenth Place 2 692
利用假期空暇之时。将这几年GCJ。ACM。TopCoder 參加的一些重要比赛做
个回想。GCJ2006。ACM2005 和TCCC2006 以后。2006 年对于我来讲是一个大丰
收,昨天晚上回想了Mobile Robot 成立先期的事情吧。今天先发惊心动魄的ACM
上海2006 吧。
2006 年ACM-ICPC(中)——Mobile Robot 上海对决
回顾到,当年清华一共同拥有6 支队伍,但是仅仅參加两个赛区的比赛,形成每个赛
区以前都要进行小规模PK,终于仅仅有4 支队伍有机会參加ACM 分区赛。Mobile
Robot 创建之初比較顺利,得到了參加两个赛区比赛的机会。迎接Mobile Robot 的
将是上海和西安赛区的挑战。
比赛前:空前的豪华阵容
记得清华大学出发上海赛区的时间是10 月20 日晚上,至于为何能记得如此
精确,是因为在那以前我经历了真正意义上的“赶火车”。

10 月18 日TCCC2006
在圣地亚哥落下帷幕。19 日从旧金山机场起飞会北京。飞机着陆时间是20 日下午
2 点半。进海关以后已经快4 点了,我立刻乘坐机场大巴直奔火车站与大部队会合。
之间都没有时间回寝室。


来到中亚饭店报道拿到參赛队伍名单的时候,就赫然发现上海2006 的參赛队
伍实力达到了几年来一个不可逾越的巅峰。上海交大的1234 队都出现在了名单中,
还有浙大和北大的Final 队都来了,这些还不够,芜湖一中的Loner(周冬),上海微
软ATC 的lympanda 也參加比赛。

上海交大一直是这几年来清华国内最强劲的对手。
如今交大又占领主场优点,实力深不可測。

上海微软ATC 尽管是旅游队,但是
lympanda 凭借在TopCoder 上的表现,没有人敢藐视这位无冕之王的实力。
对于上海赛区,清华也派出了华丽的阵容,參赛的有3 支队伍,除了Mobile
Robot(我,geworm(鬲融)和wd.h(胡伟栋))以外。还有鼎盛时期的Shangri-La
(b142857(候启明)。lxd(林希德)和zhuzeyuan(朱泽园))以及后来的西安赛区亚军
GotoFly(zcgzcgzcg(朱晨光),wangjun(王俊),tedcn(龙凡))。记得练习赛以前。
你们一块儿围圆桌吃饭,朱晨光忽然和旁边的王俊说,好像就咱们两个没有參加过
IOI,而后还有一边林希德补了一句。就咱们三个不是金牌
我第一次有机会仰慕候启明的时候,是本身第一次參加NOI——NOI2002 天津,
候启明以满分的成绩得到冠军,当时的亚军就是林希德。

以后的冬令营,我以非正
式营员參加測试奇妙得得到第三名,但更重要的是冬令营測试的冠亚军就是候启明
和林希德,以后我再没有和两位前辈在OI 上交过手。时光飞逝,我表明bomber
队參加2005 年的杭州赛区,被候启明领军的Legendary Team打得一败涂地。

随后
2006 年初的Google Code Jam China(GCJC)2006 上。我得到第三名。记得当天与获
得亚军的候启明同住在总统套房。事实上在上海赛区以前我没有在正式比赛中打败过
他们。Shangri-La 的还有一人zhuzeyuan 现在是个人队友,记得他当时在TopCoder 仍
然是Target(你可是早点在今年Final 以前把Target 拿回来呀。几回涨停就可以
),实力也不在前二人之下。


面对知根知底的Shangri-La。你们都知道一场大战在即,从实力上分析,我觉
得Mobile Robot 略弱,只是赛前咱们都没有信心必定能够在比赛中占领优点。


且咱们内心深知,上海赛区的结果将很是有可能直接决定清华大学当年的总决赛队伍。
面对这样的残酷的现实。咱们都迫不得已。有时一些有实力进军总决赛的队伍在清华
都没有机会參加分区比赛。
我的的经验看来。我以为在平分秋色的时候。最重要一点是明确本身的优点和
劣势所在,要用本身最强的方面来对抗对手。避免暴露出本身的劣势。

我想在这一
点上Shangri-La 可能没有咱们作得好。Shangri-La 的优点是三人的总体实力很是强,
他们全然可以採用三大高手的组队模式;咱们组队时间长。配合默契,而且当时自
己刚刚从TCCC2006 以100%正确率回国,保持了良好的状态。

从单人比赛上讲。
当时个人状态即便有Petr 和Tomek 在场。我都并不以为本身必定会有明显的劣势。
比赛场地是上海大学的一个大致育馆。现场气氛很是热烈,想到咱们用4 个机房
办的北京赛区的现场比赛。不禁地认为有些寒酸。
在场外碰到了lympanda,他向我了解刚结束的TCCC2006 的状况,我因而给
他描写叙述了一下几道现场比胜过程中1000 分的题目,结果全部都被panda 秒杀了,
无限仰慕呀!同一时候也第一次见到了周冬。
提一件飘逸事情,记得当时练习赛有3 题,封版时没有队伍经过B 题。但是其
实在封版后咱们经过了这题,咱们应该是当时惟一在练习赛中AK 的队伍。

记得之
后好像还和中山大学的郭老师交流过这题。

只是至于B 为何能够AC:B 题是一
道需要SPJ 的题目,可是练习赛的时候没有SPJ,而我又坚信本身的程序是正确的。
因而我不断提交。多是由于Judge 不耐烦了,才用Yes 的方法让咱们中止。
比赛以前的晚上咱们都歇息得很是好。次日早上以充足的精力迎接史诗般的上
海赛区决战。


比胜过程:400 米赛跑
中学是很是喜欢參加400 米比赛,400 米比赛从起跑姿式角度应该以为是短跑,
但是400 米已经远远超过了冲刺极限。因此400 米跑中,要求咱们从发令枪响起的
时候就加速启动。直到拼尽全力为止。


咱们回想一下比赛的过程吧。上海赛区比赛以后,咱们写下了具体的比胜过程:
依照一向的方法。鬲融从A 開始读,胡伟栋从J 開始读,我准备编程的环境,
而后从中间选择题目读。鬲融读完A 后。发现A 是一道简单题。因而选择先写A
题。


A:给定ACM网上预选赛的比赛晋级规则。求每所学校的晋级队伍数。
简单模拟题。时间复杂度O(N)。本题题目有一个疑问:一个学校出线的队伍
数目可能比该学校參加预选赛的队伍数目还多,但是题目描写叙述和例子代表不需要考
虑这样的状况。
ACM 比赛的第一题的选择对照赛的进程影响很是大,当没有优先选择比赛中最
简单 的题目时,更需要保持冷静。


在我写A 的过程当中,鬲融看了B 和C,发现C 也很easy,因而当即作C。


C:将一棵节点带权的树划分红两半,使两半的权值和的差最小。
枚举或者树的遍历。时间复杂度O(N)。

去年有一个深入的教训:当遍历树的
时候,很是easy形成堆栈溢出(杭州赛区留下的疙瘩)。

对于本题的范围,保险起见没
有使用DFS。而是使用BFS。

使用BFS 稍微添加了编程量,但是可以在必定程度
上避免没必要要的麻烦。


鬲融发现D 是一道经典的统计题,在不到3 分钟的讨论后,咱们得出了可行的
算法,因而如下写了D。在写D 的时候,鬲融和胡伟栋把题看完了,通过讨论。
决定胡伟栋開始想一道数学题I,而鬲融继续看题义不是很是清楚的G 和J 两题。


D:给出平面里的一系列点。要找一个矩形,使矩形边上的点最多。
离散化后,先推断一条直线的状况。

枚举两条横边,而后枚举竖边。一旦一条
右边的边比左边的边好,左边的边就不会再有做用。所以。枚举竖边的过程很是easy
作到O(N)。总的复杂度是O(N3)
这题事实上存在O(N2logN)的算法。我想出题人也应该没有在第一时间想到吧。
作出D 后写了B,缘由是B 的算法相对简单。但是意想不到的是:B 的例子不
合法,而且Clarification 的速度很慢。因而仅仅好先把B 放在一边。这个过程浪费
了很多宝贵时间。
随后看到team109(Shangri-La)过了一道红色气球,感受是G,因而鬲融给我讲
了G,但是发现G 实在不像算法简单或程序简单的题目。
此时。胡伟栋推出了I 的一个很是简明的公式。

而且咱们发现I 的气球也是红色
的。

刚才看G 很是多是被误导的。

因而写了I。
写I 的过程当中,由于鬲融看的题基本已经被作完了。胡伟栋给鬲融讲了H 的题
意。鬲融想出了一个可行的作法,只是由于还有更简单的题并无当即作。


I:求杨晖三角形第N+1 行不能被质数整除的数的个数。
可以找出规律。而后写出公式,时间复杂度O(logN)。我在并不知题目意思的
状况下写过了I,依靠胡伟栋的公式。咱们度过了这次比赛第一段艰难的时期。


从过D 题到过I 题。大概有40 分钟的时间。

这段时间咱们基本的失误有:
(1) B 的例子不合法,这事实上不是咱们的错误。


(2) 受气球颜色的误导,过早思考一道很是难的题目。
(3) 后来听朱泽园的建议:由于一我的的问题致使卡住。应该一我的解决。不
应该让全队都陷入混乱中。
我以为咱们直接选择写另一道题目主要有两个缘由:一是B 卡住的缘由比較
特殊,不是咱们花时间就能克服的;二是I 的算法比較清楚。很稳定。


等I 过了以后,B 的Clarification 出来了,Judge 换了一组例子。因而開始调B。


B:给出16 个数,将他们排成十字架形,使力矩平衡。求本质不一样的方案数。
十字架一共同拥有4 个“臂”。首先找出一个“臂”的所有状况。而后将等值的无
反复的合并成两个相对的“臂”。而后从16 个数中选出8 个。将他们做为一组,
另外8 个做为还有一组,这样的方案的总数为前8 个成对的方案数乘后8 个成对的方案
数。最后把方案数求和除4。


本题属于搜索题,而且时限特别紧。由于搜索问题的优化空间每每很是大。而且
又是多组数据,因此很是easy形成TLE。在调对例子后TLE 了一次。改进了算法后
由于开小数组RE 了一次,最终在第三次提交经过了B 题。


记得高中时一次在网上作题(仅仅记得是xreborner 出的题目)的时候。比赛一開始
就写一道时限很是紧的题目,预计開始程序的正确性是没有问题的,就是效率比較低;
但是,在不断优化的过程当中改错了程序。致使1 个小时之后当程序不TLE 了之后。
程序变成了WA。这样使得信心全然崩溃。


听了很是多同窗讨论以后。发现很多队伍就全然卡在了B 题上。之后对这样的题目
仅仅能倍加当心,现在咱们尚未什么特别好的方法。而且。B 题的例子仅仅具备測试
性。不具备调试性,编程时必须特别细致才行。
这时大概才1 个多小时,咱们看似顺利地经过了5 题;但是现场的状况并无
不论什么优点可言,Shangri-La 在几分钟后经过第5 题。两个队伍的罚时仅仅相差1 分钟。
随后咱们到达了第二段艰难的时期,主要缘由是鬲融把F 的题目看漏了一个条
件。与胡伟栋讨论后误觉得这个题比較easy。很是快这题出现Run-time Error 好在重
读题后发现错误并及时放弃,没有再浪费时间去把Run-time Error 调成WA。假设
当时死作此题则后果不堪设想。
在鬲融和胡伟栋分别读F 的程序以及题目的时候,由于现在剩下的题目都比較
复杂,咱们选择了一道相对清楚的题目H 继续作。
H:对一个集合进行两种操做:插入一个数和询问MOD Y 最小的数中最后一
个数。
由于数字的范围是[1..500000],先选择一个合适的M。当Y<=M时,经过插入
时直接保存来处理,当Y>M 时直接枚举,用并查集求一个元素的兴许。

这样每一
次操做的时间复杂度是O(Sqrt(500000)).
但是,開始选择M为1000,并无充分预计复杂度的平衡性。

開始咱们以为
并查集的常数较大,但是后来感受到并查集的常数相对小一些,因而把M选为
500 就过了。后来在同出题人交流的时候,被告之M取在400-800 的范围内都可以。
第二段艰难的时期的缘由可能不不过题目看漏,也由于题目难度已经添加。
好在当时特别是当H 的程序TLE 以后,咱们都比較冷静,相信本身H 题的算法是
正确的算法。仅仅是參数的选择不够合理。这样的考验在平时一般是很是少遇到的,经受
此次考验以后。再遇到相似的问题,咱们应该能够更冷静一些。
过了H 以后,鬲融已经再次确认了J 的题意,随着气球的指引,咱们决定攻克
本次比赛最大的“纸老虎”:J,而作J 的过程当中胡伟栋一直在想G,已经大体得
到了算法的框架。
J:给出一些数的限制大小的关系,求更精确的关系后者推断为矛盾。
转换成图的模型。不断迭带调整,直到不能调整为止。固然这题由于限制大小
关系中既有’<=’还有’<’,因此需要推断XI<XI 是不合法的。时间复杂度O(N
3)。


J 题的数据输入输出比較复杂。但是题目自己很是easy。这题对编程能力提出了很是高
的要求。
经过J 题以后,看了一下board,当时Shangri-La 仅仅有5 题,只是在咱们还没
有反应过来的时候Shangri-La 就也相同7 题了。罚时上咱们率先4 次提交。
在比赛的前200 分钟,我延续了TCCC2006 的良好状态。咱们配合默契,在面
对BHJ 这样琐碎的题目时,队友会提早把需要注意的细节总结在纸上,整个 过程
都保持得很是平滑。另外,鬲融和胡伟栋在我作每一题时都准备了很是合适的測试数据,
大大减少了我測试的时间并非常有效地提升了提交正确率。由于剩下的题目难 度明
显高出一个档次,在经过7 题时的罚时率先是最后得到比赛胜利的重要砝码。


现在剩下的仅仅有E,F,G 三道没有队经过的题目了,事实上终于也没有队伍通
过。咱们之前读错过F。所以此次分别尝试了E 和G。但是都失败了。这里咱们曾
经讨论过先作E 仍是先作G,当时面临的选择是:E 的复杂度预计较高,不知优化
后是否能经过,而G 的算法性更强。胡伟栋仍然没能全然清楚怎样解决。实现的复
杂度高于E。

咱们此次带有赌博性的选择了E,并无细致考虑假设E 的时间要求
过于严格会出现什么问题(可能与B 的相对轻松经过有必定关系),在此后的比
赛中咱们应该注意周全考虑。尽可能选择题意清楚并且复杂度easy预计的题目。
E:带限制的有向图的第K 短路。
本题事实上有标准的A*算法,咱们也使用了这个算法。但由于复杂度太高。我
们的程序一直TLE。据Judge 说这题对时间的要求很严格。
G:在一个森林的若干点布置仪器。仪器有做用范围D。仪器之间的距离需要
大于等于D,求最大的覆盖长度和最小的权。


本题可以使用二次方状态的动态规划,相似CTSC2004 的一题。我和胡伟栋讨
论后成功想出了正确的方法,并且在最后时刻写出了程序。而鬲融和胡伟栋则出了
一些測试数据,将数据调事后时间已经很是紧张了。首先由于忘记优化floyd 超时了
几回。在优化了floyd 算法以后,仍是没有考虑到图不连通的状况,未能在比赛结
束前调出。


F:给出一些公理。若是和定理之间的关系,依次尝试。推出尽量多的定理。


在同等状况下要求使用的若是最少。
本题可以用最小费用最大流解决。但是比較easy实现的网络流算法都很是难在时
限内出解。


现在看来,EFG 三题中的E 没有比赛中想像得那么难,当时比赛中受到巨大压
力的影响没能攻破此题,只是FG 题即便出现在CTSC 难度的比赛上也很合适。


比赛结束:罚时险胜
比赛结束时咱们与Shangri-La 同为7 题。上海交大一队终于也经过了7 题。我
们依靠罚时的微弱优点险胜。通过惊天地泣鬼神的300 分钟,咱们最终得到了梦寐
以求的2006 上海赛区冠军。

Mobile Robot 凭借着上海赛区的夺冠。已经可以以为
得到了进军2007 东京世界总决赛的入场券。
比赛结束后见到了很是多复旦的老朋友和吴永辉老师。吴老师仍是和曾经同样,
玩笑开个不停。

那些复旦的老朋友赛前由于是參与出题,咱们一直没有看到,颁奖
仪式以前,咱们最终有机会在后场一块儿聊天。

只是聊天这些时间中,我和b142857
错过了郭老师在颁奖仪式前进行的“点名”(当时郭老师要求咱们上去讲解题目),
实在很差意思。
总结:
首先向Shangri-La 致敬,即便在最后一刻,相信你们都还仍然有机会,棋逢对
手也是我ACM生涯中的一大幸事。当两支队伍都经过7 题的时候,排在第3 名的
队伍才刚刚5 题。

也就是说,咱们两支队伍事实上仅仅用了2/3 的比赛时间就锁定了上
海赛区的冠亚军。


上海交大一队终于也经过了7 题,比赛開始时咱们就注意到了交大开场时很
不顺利。只是顽强的交大一队稳扎稳打。在最后一小时也成功经过了第7 题。在这
里向交大体敬。开场的种种不利不亚于我在杭州2005 时的起跑,大家能够沉着应
战,破釜沉舟的精神一直值得咱们学习。当时交大一队中有一位来自辽宁的选手辛
韬,记得NOI2003 以前咱们有数次交手都以我失败了结,后来经常在不少网上比
赛中切磋,2005 年ACM 北京赛区也有你熟悉的身影,在清华早有耳闻你在交大的
优异成绩,祝福你从此愈来愈好。
此次比赛的命题工做是由复旦大学担任的,复旦大学的命题特色与东欧的命题
风格很是接近,题目的算法性偏强。题目对程序执行速度要求广泛高。
依照panda 的说法,上海微软ATC 队由于一些配合的失误,终于仅仅经过5 题,
只是也是前10 的队伍之中的一个。另外,芜湖一中队也顺利经过5 题排进前十。

GotoFly
经过第3 题的时候还排在第3,只是后来卡死在J 上了,有些惋惜。
后来,分配总决赛名额的时候,上海赛区获得了10 个总决赛名额。这个数字
相信也是这些年来的之最吧。
这是一场值得记念的比赛,參加2006 上海赛区的强队实力远高于几年内的各
大赛区。能够站立在上海赛区的最高领奖台是Mobile Robot 得到的最高荣誉之中的一个。
经历了上海赛区大战的洗礼,接下来的西安赛区出场的则是更成熟的Mobile Robot。
附上海赛区排名:
1 Tsinghua University => Mobile Robot 7 617
2 Tsinghua University => Shangri-La 7 709
2 Shanghai Jiao Tong University => Lacotix 7 1034
2 Fudan University => Symphonic Rain 6 924
2 Shanghai Jiao Tong University => Prodigies 6 957
2 Fudan University => ShuangYY 6 1098
2 Xiamen University => btALT 5 534
3 National Taiwan University => puyo 5 563
4 The First Middle School of Wuhu => WHYZ 5 652
4 Microsoft ATC Shanghai => Core-Stop-Dump 5 729
4 Zhejiang University => Golden Keyboard 5 817
5 Peking University => PKU_T2 5 819
6 Zhejiang University => Dasher 5 956
6 East China University of Science and Technology => Redfield 4 325
7 Tsinghua University => GotoFLY 4 367
7 Zhejiang University => sago 4 392
7 National University of Defense Technology => Robust 4 438
8 Zhongshan University => ZSU-Tanglha 4 512
9 Tongji University => Revenge 4 559
10 Shanghai Jiao Tong University => H-E-A-T 4 600
10 Xidian University => ACMore1 4 602
11 Wuhan University => Moonmist 4 723
12 Zhongshan University => ZSU_Olympus 4 765
12 Nanjing University of Science and Technology => Narcissus 4 774
13 Northwestern Polytechnical University => 1010 1100 4 845
14 Harbin Institute of Technology => Gaminerie 3 200
15 Fudan University => White * [ Bear + Dew + Cloud ] 3 337
15 Zhongshan University => ZSU-Everest 3 360
15 Hefei University of Technology => Happy For Unpain Teeth 3 406
16 Beijing University of Posts and Telecommunications => Neon 3 442
17 Shenzhen University => Aspire 3 453
18 Harbin Institute of Technology => Corsair 3 457
18 Nanjing University of Science and Technology => backbones 3 461
18 South China Agricultural University => scau_update 3 468
19 Huazhong University of Science and Technology => rodimus 3 480
20 Ningbo University => ACHC 3 505
21 Peking University => www_pku 3 513
21 Fuzhou University => OrOrz 3 520
22 National University of Defense Technology => Puzzle 3 520
22 Donghua University => Gespenst 3 535
22 Hunan University => Footmen 3 535
23 Tianjin University => TJU_Rocket 3 563
24 National Taiwan University => ABCDE 3 568
24 Nanjing University of Aeronautics and Astronautics => ZipFish 3 575
25 University of Electronic Science and Technology of China =>
transistor 3 599
26 Shanghai Jiao Tong University => Lucifer 3 608
26 Zhengzhou University => ZZU_cheapwine 3 650
27 Wuhan University => Silence 3 685
27 Hangzhou Dianzi University => MP3 3 687
28 Jinan University => JNU-FLY 3 830
29 Huazhong Normal University => Neptune 3 857
利用假期空暇之时,将这几年GCJ。ACM。TopCoder 參加的一些重要比赛做
个回想。

GCJ2006,ACM2005 和TCCC2006 以后,2006 年对于我来讲是一个大丰
收,晚上发ACM 西安2006 吧。
2006 年ACM-ICPC(下)——古城西安
艰苦的ACM2006 上海赛区结束以后。咱们本来觉得清华会选择另外3 支队伍
參加西安赛区的比赛。

何况。大三的课程的实验任务很是重,咱们也就中止了计划的
按期训练。大概在25 天以后,12 月20 日左右忽然收到邬老师的通知,准备出发
參加ACM 西安赛区比赛。咱们的2006 西安之旅也就是在这比較仓促的准备中开
始的。


西安赛区以前,咱们没有定下明白的目标,比胜过程中到处都採用了追求稳健
的方法。当时也是为了不一年前的杭州悲剧重演。
西安的比赛没有太多兴奋的AC,没有惊心动魄的场面。所有过程都在相似旅
游的气氛中结束了。做为Mobile Robot 的最后一战,这里也做一个简要的回想吧。
由于此次题目又是Srbga(刘汝佳)命题的,我最后也顺便列举一下我总结的他命
题的特点吧。
比胜过程:
2006 年清华相同派出了3 支队伍參加西安赛区。除了Mobile Robot(我。
geworm(鬲融)和wd.h(胡伟栋))以外。还有Panacea(OpenGL(唐文斌),zhy(周源)
和liuhe(刘贺),假设你第一眼看见这个词就知道是什么意思,我相信您必定准备过
GRE 吧?)以及一块儿參加过2006 上海赛区比赛的GotoFLY(zcgzcgzcg(朱晨光),
wangjun(王俊),tedcn(龙凡))。
2006 年冬天是我第一次来到西安。刚下火车就深深感觉到了西安的古城气息。


到达宾馆以后,咱们作得第一件事情就是玩,印象很是深的是钟楼,鼓楼还有大雁塔。
咱们作的最基本的事情可以用GotoFLY 的4 个大写字母GFLY 来表示。就是“公
费旅游”。
比赛以前的晚上。咱们认真讨论了比赛中採用的策略,參加西安赛区没有太多
传统强队。咱们一致认为应该优先採用比較稳健的策略。赛后有比較简短的总结:
依照一向的方法,鬲融从A 開始读,胡伟栋从J 開始读,我准备编程的环境,
而后从中间选择题目读。

与上海赛区相比,比較顺利的是我一下就看到了一道比較
简单的题目B,因而我当即写了B 题。
B:使用火柴棒拼接数字,给定n,m,求使用不超过n 根火柴棒拼成的m 的倍
数中最大的数字。


本题基本的思想是动态规划,方程很是easy得出,时间复杂度O(nm*10)。

但是
本题有两个难点:
(1)怎样获得最大的数字?标准的方法是使用BFS。搜索的过程当中必须很注意
搜索的顺序,但是这样实现很是easy出错。

我注意到了n<=100 的条件。所以结果不
会超过50 位,因而我使用3 个int64 来保存结果。这样既实现简单又不easy错。虽
然程序常数比較大,但是不至于致使超时。
(2)不能不使用火柴棒。而数字0 也需要火柴棒来拼成。好比n=5。m=97 的结
果是-1,而n=6,m=97 的结果是0。
ACM 比赛的第一题的选择对照赛的进程影响很是大,这次比赛很是成功地使用了
很是稳妥的算法。
E:标准的课堂睡觉问题,求最先所有人不睡觉的时间。
简单的模拟题,而且时限很是宽松。


E 事实上是最简单题目,但是由于个人低级错误,不只获得了一次罚时,而且浪
费了宝贵的时间。好在当时比較冷静,很是快改正了错误。
D:对于一个不超过100*100=10000 的表达式,可以在当中增长*来表示不论什么
字符。假设一个表达式仅仅能和惟一的等式相应,则称为A 类表达式。给定一个表
达式B,要求经过改变最少的字符使它变成A 类表达式。
本题使用了一次搜索再检索的方法,可以有效控制程序的速度。预计时限问题
后选择先提交节省了很多时间。
J:给定一个4*4 的网格的边框图形,问可否够经过在4*4 的网格上放6 个
2*2 的正方形框获得。
H:给定一组旋转后的曲谱及初始音符及结束音符,求原始的音符序列。
開始胡伟栋没有看到旋转的角度是整数的条件,因而推出了可以解决实数角度
的数学公式。但是由于公式需要考虑的状况比較复杂,幸运的是咱们使用了枚举角
度再推断的方法。


写了读入部分以后。看到Panacea 过了H 题。鬲融又一次读了题目,发现了角度是整
数的条件。因而略微改动就获得了正确的程序。


本题需要推断的条件很是多,需要考虑得很是细致:
(1) 先把坐标依照X排序。
(2) 经过初始音符及结束音符获得sd。推断sd 是否在1 到5 之间。
(3) 推断相邻两个字符的距离是否在sd 到5sd 之间。
(4) 推断每个点的坐标可否够相应一个音符。
F:求3 维空间的Voronoi 图。输出每个Voronoi 块体积占的比例。
胡伟栋提出了本题的正确算法:切割立方体。假设一个立方体的8 个顶点都到
一个点近期,那么这个矩形内的所有点都到这个点近期,不然就切割这个立方体,
直到立方体的体积少到必定程度为止。
開始程序的精度不够,后来胡伟栋提出了一个启示式的切割立方体的方法,思
想就是使得两个立方体的切割面以尽可能大的几率穿过Vorinoi 平面。程序的效果很是
好,而且那时时限也已经放宽,因而顺利经过了F 题。事实上本题蒙特卡罗法也可
以过,咱们也想到了这种方法,但是由于随机过程写的效果有问题,致使精度不够。
经过F 题的时间是270 分钟。封版时除了Panacea 经过4 题,其它队伍最多仅仅
有3 题。当时Panacea 正好坐在咱们背后。很是惋惜他们卡在了D 和G 上。终于也
仅仅有4 题。

最后半小时咱们也没有尝试H 或者A。因为其它队伍很是难在最后一小
时经过4 题。

咱们就简单尝试了几回C 就默默地等待着西安赛区比赛的结束。


终于咱们经过6 题排名第一,由于已经得到了上海赛区的冠军,不參加ICPC
的排名,只是仍然得到了Solaris 杯。
总结:
西安的ICPC 冠军是北京大学的T2(rainer,dzx 和cici),后来他们依靠西安
的夺冠成绩进入了2007 年的全球总决赛。T2 在最后一小时表现极其神勇,顺利通
过2 题一举超过了GotoFly 和Panacea。而且最后几分钟还很是有但愿经过H,赛后
和rainer 讨论以后发现算法相差无几。可能就是一些小细节缺陷吧。2006-2007 年
度的ACM 比赛,从上海到西安,还有东京的总决赛,Mobile Robot 每次比赛都能
看到了T2 熟悉的身影。咱们在封版以后常常由于压力较大很是难攻破题目。他们在
封版以后的冷静心态很值得咱们的学习。
GotoFly 与T2 同样经过5 题。由于5 分钟的罚时劣势位居第三,Panacea 经过4
题依靠罚时优点排在第四。两队都欠缺一些运气,很是惋惜。

另外印象很是深的是。坐
在对面的朝鲜队经过了4 题在ICPC 中排名第2。假设西安能够多一个名额的话,
他们就行出现在总决赛赛场了。
西安赛区是Srbga(刘汝佳)出的题目,从高中时期就開始作了Srbga 出的题
目,西安赛区的题目从新体现出了刘汝佳命题的不少重要特点:
(1) 假设Srbga 大哥出是一套题目。那么你会明显认为题目拿在手上明显重一
些。Srbga 大哥出题很是重视题目描写叙述或者故事的完整性。他很是少使用一些僵
硬的题目模型和描写叙述。

有时读着他出的题目更像是在读小说,赞扬故事。
固然,由于Srbga 大哥出的题目描写叙述完整。刚拿到题目的时候会感受很是难
上手。咱们很是easy发现没有一道题目easy上手。

用数据表达。比赛開始时
的空机时间偏长。
(2) Srbga 大哥出的题目和世界总决赛的题目风格近似,题目多半对编程能力
提出很是高的要求。相比之下对算法的要求不是很是高。考察的都是比較基
本的算法。假设用一个字形容就是:野。


(3) Srbga 大哥出的题目对算法的考察范围很广,尽管对于某特殊的算法要
求不高。有时还需要很是强的组合算法能力。
(4) Srbga 大哥出的题目中很是注意数据的设计。好比C 题中特别生成了极端的
状况,J 则使用了接近20000 组数据。普通状况下,不通过精心设计的随机
算法会吃尽苦头。
2006 年的Mobile Robot 的ACM 分区赛比赛任务已经全部结束了,2006 对于
Mobile Robot 来讲是丰收的一年,咱们圆梦了上海和西安的双冠军。

在随后的冬天。
咱们加紧训练准备东京的总决赛。


利用假期空暇之时。将这几年GCJ,ACM。TopCoder 參加的一些重要比赛做个
回想。回想了GCJ2006 和2005 年的ACM 以后,转向TopCoder 的比赛吧。我參加
的最先的TopCoder 赛事是TCCC2006。
TCCC2006——死亡之组
TopCoder Collegiate Challenge(简称TCCC)是TopCoder 通常在秋季举行的面向全
世界在校学生的程序设计大赛,2006 年的TCCC 在圣地亚哥举行。从北京到旧金山
的飞行仅仅需要11 个小时左右。因此不至于那么疲劳。

路上一切都很是顺利。很是感谢
OpenGL 的提醒,对于超过8 个小时飞行自带拖鞋和枕头对我来讲仍是很是重要的。
TCCC2006 使用的标准的TopCoder 现场比赛形式。比赛有48 名选手參加,首
先48 名选手被分为16 我的一组,每组分别进行半决赛,前2 名直接晋级决赛,3-
6 名晋级wildcard 比赛。wildcard 比赛12 人中的前两名填补决赛的最后2 个名额,
决赛由8 个选手參加。

TopCoder 现场比赛中很是重要的一个创新是:每名比赛选手
在观众席前都有一个同步的显示器,这样观众可以看到选手不论什么时刻作的事情,极
大加强了互动性。


TCCC2006 的Room 1 和后面的Final Round 均可谓是死亡之组。现在就回顾一
下这两场激烈的比赛吧。
Room 1:
至于3 个房间的分配。TopCoder 依照注冊截止时选手的Rating 分布蛇形分配。


但是TCCC2006 的房间实力分布极不平衡,我与上届冠军tomek,著名选手reid。
Egor,halyavin 还有Rating 不高但是实力极强的Ying 和ardiankp 同被分到了Room
1,赛前Room 1 成为公认的死亡之组。


在圣地亚哥,我和师兄Macsy(张一飞)同一个房间,很是感谢师兄的关心,我
那几天歇息的都很是好。

要知道假设同房的人有10 小时左右的时差的话,一人必须
很是当心才干保证不影响还有一人的歇息。


Room 1 在我抵达美国的次日早上进行。选手赞成提早30 分钟准备一些必要
代码。只是现在你们都比較喜欢学习Petr 那样一行代码都不打。如下就是比赛的
过程:
250 分题目是:给定n(n<=50)个整数AI 和一个阈值d,计算n 个整数所有排列
PI 中知足|API-API+1|<=d 的排列中。所有不一样可能AP1 的个数。这题最标准的方法是
动态规划,基本思想是把n 个整数排序以后。计算两条相邻元素不超过d 的序列。
我使用了一种更静止的算法,把n 个整数排序以后,对于AI。假设AI 可能做为排
列的第一个元素,那么AI 必然在某一个方向(大小)连续而在还有一个方向每间隔
两个元素相连。

这个算法比較easy实现,但是正确性证实比較难,甚至让人第一感
觉是错的。我写完程序測试了所有例子都正确就提交了。243 分。提交以后我又測
试了不少数据,并在纸上尝试证实正确性。


赛后。我看了网络上的讨论记录。在我提交250 分题以后,立马遭到了misof
的怀疑。他以为个人算法有问题。据Macsy 学长的回顾,OpenGL 在我屏幕前看我
写完程序,也以为个人算法是错的。只是后来他们讨论以后发现没有反例。


关掉250 分题目以后。我刚刚意识到Room 1 的3 题分数不是250-500-1000,
而是250-600-900。现在看来,对于250 比較顺利的状况,应该先作500。若250
不顺利或者想出奇制胜的话,可以先开1000 分。当时没有什么经验,我以为900
比600 应该简单一些。因而就打开了900。
900 分题目是:给定一张n(n<=10)个点的带权有向全然图(也就是n2 个实数)
和一个衰减系数p。求一条通过d(d<=10)条边路径(不需要保证简单路径),要求
这条路径的指数衰减长度(指数衰减是指第i 段的长度乘以pi-1 而后求和)最接近
1000。这题假设使用穷举法,就需要1010 左右的计算量,在TopCoder 的測试机上
也不能经过。由于路径长度很是easy超过1000。因此很是难找到多项式时间的动态规
划。我当即有了一个想法——双向搜索。

对于长度为d 的路径。事实上可以看做从
某一个点p 出发的一条反向的长度[d/2]的路径和一条正向的d-[d/2]的路径,对于
固定的节点v 来讲,这样的两个方向的路径都不超过n[d/2],这样仅仅要枚举一个方向
的路径而后二分查找还有一个方向就能够。复杂度是O(dn2+[d/2]) 。
现场比赛调试环境不是很是好,我花了很多时间调试以发现程序中的错误。提
交以后690 多分,还不到700。

只是对于900 分的题目在那种压力下还可以接受。


提交以后我花了15 分钟左右測试。没有发现错误。

因而就准备作600 了。
600 分题目是:一道经典的数学题,给定一些盘子叠放的规则,计算顶层盘子
的最大可能大小。事实上算法不是很是难。仅仅要二分顶层盘子的大小。而后依次贪心计
算来推断底层是否能够知足就能够。

仅仅是贪心的时候要考虑两种状况,一时想不清楚。


我当时已经感受很是疲劳,思路不是很是清楚,最后40 分钟时间也没能调试经过。


题过于琐碎。Room 1 中终于没有选手经过600 分题,并且成就了一个刺激的
Challenge 阶段。


Coding 阶段我和tomek 採用了大相径庭的策略,我跳过600 直攻900,而
tomek 在600 中挣扎了很是长时间才放弃。Coding 阶段结束时,有4 名选手提交了3
题。我依靠速度优点率先相同提交250 和900 的tomek 35 分左右。
Challenge 阶段開始时,我盲cha(blind challenge)了一个最后时刻提交的900
分程序。但是由于我选择的数据实在太弱,失去了25 分。

这样我和后面的tomek
仅仅相差10 分左右了。因此我决定仅仅要tomek 不动,我也不动了。

事实上,当时
tomek 已经知道本身的900 是错的,Challenge 阶段他预计已经放弃了。

个人
Challenge 阶段终于就以-25 分结束。


以后的Challenge 就是Ying(王颖)展示勇气和智慧的舞台了。他Challenge 掉
了所有提交的600,凭借225 分的加分超过了我。排在榜首。这样比赛的形式也一
目了然了,7 位选手提交了900,我依靠速度优点率先第四名reid 超过100 分。仅仅
要我两道题目能够Passed System Test 就足以进入Final Round 了。
System Test 以前。我和Ying 讨论他“超神”的Challenge 阶段。这是我第一次
參加TopCoder 的现场比赛,发现System Test 结果显示是依照System Test 以前的
排名倒序进行的。測试到我时。除了tomek 的4 名选手的900 都过了。显示个人
结果时,两个绿框闪烁了很是久最终显示出了两个大大的钩,我最终可以欢呼庆祝胜
利了。

我前面的Ying 也两题全过了。

这样咱们两位中国选手得以在死亡之组携手
出现。这场比赛真可谓是中国选手的胜利。Reid 仅仅能在Wildcard 赛再做努力。
tomek 则被直接淘汰出局了。
Final Round:
接下来的两天里,我观看了Room2,Room3 和Wildcard 的比赛。

第2 天晚上
咱们參加了TopCoder 赞助的Laser Tag 游戏。咱们所有中国人组成了一队,个人发
挥很是差,缘由是这个游戏与CS 不一样,选手头上没有感光器,而我喜欢遇到人就攻
击头部。因此狭路相逢多半是我失败。活动中,我有幸结识了不少Dev 的神人。
当时由于vividmxx 没有參加,magicpig 和PE 的竞争很是激烈,终于PE 得到了“浙江
大学建校100 年来第一个TCCC 冠军”。记得赛后我uncle 来到现场,我uncle 是
浙江大学本科毕业的,magicpig 见我uncle 第一句话就是“浙江大学建校有100 年
历史了吧?”汗死了。

另外zjq 也得到了Design 的亚军。


第三天中午Championship Round 開始了。

决赛时,场地里安装了很是多摄像头,
可以说咱们的不论什么举动都在严密监视下了。

这回我提早确认了题目分数是标准的
250-500-1000 的分布。

參加决赛的选手除我以外有:andrewzta,ardiankp,bmerry。
Eryx,mathijs,Petr 和Ying。面对决赛选手的实力,我已经没有意义定一个相似于
“保几争几”的目标了,努力发挥本身的水平是最应该作的。如下就是比赛的过程
了:
250 分题目是:给定n 个正三角形,每个顶点都有数字,选出6 个三角形拼成
一个正六边形,要求相邻的数字必须一样。

三角形赞成旋转,计算能够获得多少个
本质不一样的正六边形。题目很是长。我细致读了两遍才開始写。算法很是清楚。就是枚
举六边形中心和四周的7 个数字。而后推断是否有足够的三角形。在推断本质不
同的时候犯了一个错误,调试了几分钟,提交以后仅仅有215 分了,看了一下排名,
Petr 有232 分之高,其它选手都尚未提交。

測试了几分钟发现程序的执行时间不
是很是稳健,很是easy到达0.8 秒左右,測试了15 分钟之多才逐渐放心下来,因为基
本上所有数据都0.8 秒左右。赛后Macsy 告诉我,个人程序速度瓶颈是在set 的判
断。因此时间比較稳定,不会超时。我当时的犹豫和没有经验浪费了至少20 分钟
的时间。


依照赛前的计划。我这时应该打开1000 的题目的。但是由于本身对250 没有
信心,而且求稳思想比較重,我先打开了500 分的题目。现在看来。开500 分的
题目并不算错误,事实上在打开500 分题目的时候,与Petr 的差距不是很是大。
500 分题目是:给定一个机器人的移动命令序列,要求计算结束时机器人的位
置。由于移动序列中赞成()这种反复操做,直接模拟是超时的。这类题目的标准
算法是利用矩阵乘法,由于以前对于此类题目没有经验,没有准备好就開始写了,
致使矩阵处理失败。我果断放弃了调试,换用一种记录中间结果的搜索方法,写完
的时候已经仅仅有280 分了。更重要的是我已经没有时间进攻1000 分了。

提交以后
排在第3,前面是Petr 和Eryx。
1000 分题目是:给出一个排队取菜的模型,计算一个等待时间的排队序列。
而且对于多种答案的状况,要求计算字典序最小的序列。

题目事实上不是很是复杂,集
合动态规划就可以解决。只是模拟取菜过程时需要很注意细节。

Petr 提交了一个
660 分左右的程序,Ying 则在最后一分钟提交了400+分。排在第2。
Challenge 阶段显得很是枯燥无味,前两天大发神威的Ying(+225)和Petr
(+300)都没有尝试Challenge,整个Challenge 阶段没有不论什么一个Successful
Challenge。


System Test 结果出来了,在bmerry,ardiankp 和andrewzta 都仅仅经过一题的结
果出来以后,排在我后面的mathijs 两题都Pass,随后个人250 和500 也都Pass 了。
但是。排名在我以前的Eryx 和Ying 的500 分和1000 分都Failed System Test 了,
我瞬间提高到了第二名的位置。只是尽管Petr 的1000 分挂了。但是他依然凭借
250 和500 的速度得到了冠军。
在这里说一下1000 分的真实状况吧。因为这些时间来对于TCCC2006 Final
Round 的1000 分题目有很是多不一样的说法。比赛结果中显示没有选手经过1000 分题,
假设细致分析測试结果。Petr 的程序由于超时出错,而Ying 的程序由于一个地方
没有清0 而致使错误。确实很是惋惜。因为假设Ying 的1000 能够Pass 的话,他将
是TCCC 的冠军。

只是Ying 的算法犯了与形成Petr 超时同样的错误,他们的动态
规划程序比标准方法多出一个n 倍的时间,我之前成功生成了一个用例,可以让
Ying 和Petr 的程序都超时,这个样例已经获得了Ying 的承认。需要指出的是
TCCC2006 是TopCoder 的測试机的速度仍是很是慢的,两个程序假设在现在的机子上
执行可能仅仅需要1 秒左右了。


比赛以后和uncle 到downtown 游玩了一下,參加完颁奖晚会。次日就回国
了。
总结:
TCCC2006 是我第一次參加TopCoder 的现场比赛。很是有幸能够在这么多的第一
次中就进入决赛并且得到第2 名的成绩。很是感谢同參加比赛的同窗Macsy,
OpenGL。Ying 还有PMH 的关心和帮助,大家在我比赛时全程在场边,让我感受很是
温暖。
另外。我还有幸认识了visualage,现在他已是arena 的负责人了吧。记得他
和OpenGL 在Room 1 的Challenge 阶段经过大声叫中文(在国外,这是最好的password)
告诉我tomek 的900 是错的,惋惜我没有听见。
TCCC2006 对于中国来讲是不小的收获,中国选手占据了Dev 比赛。PE 得到
“浙江大学建校100 年来第一个TCCC 冠军”,magicpig 和zjq 分获Dev 和Design
的亚军,也就是说中国包揽了所有亚军。在比赛之余,我很是高兴认识了众多
TopCoder 的朋友。
Petr 在决赛中表现了很良好的状态,TCCC 的夺冠标志着Petr 收获了2006
年的大满贯。Ying 也採用了很是合理的策略,仅仅惋惜他的赌博由于运气差一些惜败。


我採用了比較保守的策略,在所有决赛选手中排名第2,这也是我在TopCoder 的
现场赛事中的最高名次了。
TCCC2006 我很是感谢家人的关心。父母凌晨很是早起床查看个人比赛结果,而
uncle 还特意赶来现场为我加油。这几年的TopCoder 现场比赛的赞助商列表里都能
找到American Online(AOL)的身影,TCCC2006 是AOL 惟一一次进行了3 个小时左
右的全程直播,父母和uncle 都在网络上观看了现场的影像直播。
TCCC2006 我奇妙地保持了100%的正确率,我我的以为TopCoder 现场比赛对
正确率提出了更高的要求。咱们没必要太在乎Coding 阶段的那些高分,仅仅要本身的
程序是正确的。就是成功的。
利用假期空暇之时,将这几年GCJ。ACM,TopCoder 參加的一些重要比赛做个
回顾。首先是GCJ2006 的回顾。


Google Code Jam 2006
一波三折:
Google Code Jam 2006 是我第一次到美国參加现场的程序设计比赛。

Google
Code Jam 2006 的比赛地点设在了纽约,此次纽约之行以前的签证出了不小的问题,
这里很感谢你们对咱们的关心。特别感谢吴总(wyy)和鲁小石的帮助。使我最
终踏上纽约之旅。
从北京到纽约的飞行时间是13 个半小时,由于是第一次作超过8 小时的飞机,
没有什么必要的经验和准备,路途很疲劳。一到宾馆就睡了,结果由于手机铃声
的时间使用的是东方时间。差了12 个小时,一觉把所有事情连晚饭一块儿都睡过了,
随便吃点东西就继续睡了。以后的所有现场比赛我都养成了提早睡觉的习惯,以保
证充足的体力。
比胜过程:
比赛时精神状态还算可以,但是分配了比赛房间以后发现本身和tomek 分在一
个房间,真是很是不爽;在和旁边的zhuzeyuan 抱怨的时候,发现他和Petr 一个房
间。彼此彼此吧。
如下就是比胜过程了,总体来讲比胜过程比想象的艰苦,只是事实上在System
Test 以前的结果仍是很是惬意的。先简单描写叙述一下3 道题目吧。
250 分的题目是一道平面极值问题。给定n 个点,求一条直线,使得n 个点到
这条直线的y 方向截距总和最小。我回顾起金凯在2003 年集训队论文中报告中讲
到的很是相似的一道题目。记得一个重要结论是这条直线必定通过两个点。尽管题目
有些不一样,但是很是快获得了一样的重要性质:这条直线必定通过两个点。

这样很是容
易获得一个O(n3)的算法。
500 分的题目是一道反Hash 函数问题,给定一个Hash 函数和x。求一个最小
的非负数y 使得H(y)=x。预计了一下,单向搜索需要26^8。因而我改用双向搜索。
这样就变成了26^4。但是实现过程比想象的复杂很是多。提交了后仅仅有280 左右了。
事实上。这题有更简单的数学方法,tomek 的程序有450+。
1000 分的题目是涉及卷积函数和计算反函数的问题,经过转化变成线性方程
求解问题。当时受到现场气氛的影响有些紧张,浪费了很多时间,提交以后550
分左右。

事实上。当时一些原理问题都没有想清楚。只是后来和Ying(王颖)通过讨
论验证都是正确的。
Coding 结束以前Petr,tomek,Ying 和andrewzta 都提交了3 题。当中Petr 领
先得比較多。我和其他3 人差距50 分之内。
Challenge 阶段開始以后,我由于500 分题本身使用的是双向搜索的算法,没
有注意到有些单向的搜索加模线性方程的方法事实上是正确,在10 分钟之内cha 错
了2 次。落后于上述的4 我的,排在第五。
但是如下的5 分钟发生了戏剧性的一幕。首先是Petr 的250 被cha 了,接着
Ying 的250 也被cha 了,这样我面临这样一个状况:tomek 率先我100+分。
andrewzta 率先我30+分。由于我和tomek 处在一个房间,因此我作出了一个大胆
的决定。就是challenge tomek 的1000 分题,我随机生成了一个随机大数据,在最
后时刻提交了这个challenge。系统返回了一个使人窒息的结果:successfully
challenge。

凭借这50 分我一举超过了tomek 和andrewzta,在System Test 以前占
据了榜首的位置。
戏剧性的结果:
我很是有幸能够在第一次參加现场比赛时,就行和冠军这么接近。假设System
Test 能够全部Pass 的话。这能够以为是一场完美的比赛。
可是,整个故事就好像是被刻意设计的同样。System Test 以后的结果使我目瞪
口呆:首先是250 分的题目,我由于有一个地方没有及时使用double。而形成整
数越界;而后,1000 分的题目简直是悲剧的最高境地,我在高斯消元的时候没有
及时把一个重要变量暂存,致使影响告终果,没有想到竟然躲过了那么多大数据,
但是不能经过System Test。最后排在50 名左右。这两个错误至今刻骨铭心。
终于Petr 得到冠军,Ying 亚军,andrewzta 由于500 挂了排在第3。


11 月的纽约有些冷,我随大队人马一同去了一趟帝国大厦。景色很是迷人。


二天歇息一下后与几个中国选手打了一会“找朋友”,第一次美国之行就结束了。
总结:
比赛结果尽管不是很是理想。但是对于第一次參加世界比赛的我还算可以接受。


也算是为从此的比赛留下一些教训吧。


在帝国大厦上见识了你们的拍摄功底,我由于技术差没有拍到不论什么合适的照片。


在比胜过程中,首次见识了liympanda 的大将风度,和panda 在一块儿老是笑口
常开。他无论遇到什么状况都无所畏惧,这一点我一直在努力学习,只是一直作的
很差。但是panda 打牌的时候就不同了,老是喜欢偷看别人的牌。还炫耀本身
会说广东话,被Ying 和rocking 两位广东选手狠狠歧视了一番。
Petr 加上以前的TCO 和以后的TCCC,拿到了2006 年的大满贯,可以算是历史
性的突破吧。Tomek 有些惋惜,比完了还问我怎么cha 他1000 分的。呵呵。


事实上此次比赛Ying 挺惋惜的,事实上Petr 的发挥并不很是好,假设Ying 运气再好
一些的话,历史从那时就要重写了。只是Ying 仍是体现了他超强的数学功底,让
人佩服。

另外,来自复旦的同省队友LemonTree 也得到了好成绩。
这好像是本身最后一次和xreborner 同场竞技了(由于以后xreborner 退役了
很是长时间,忘记GCJ2008 咱们又见面了。谢谢Savior 的提醒),感谢您在我高中
时期教授了我不少编程技巧。我一直沿用至今。
附比赛排名:
Handle Score
Petr 927.02
Ying 811.21
andrewzta 761.56
halyavin 732.46
tomek 677.55
tomekkulczynski 634.69
pashka 590.05
asaveljevs 579.60
ainu7 552.23
misof 537.19
Egor 534.19
xOberon 517.65
reid 516.23
bmerry 498.01
LemonTree 497.27
MikeMirzayanov 490.32
PaulJefferys 481.89
monsoon 478.60
Andrew_Lazarev 475.39
tsjoker 454.86
kalinov 440.75
pparys 440.41
dyatlov 420.64
Michael_Levin 419.19
daveagp 403.39
malcin 399.55
kalmakka 397.15
kedaizd 391.91
cyfra 389.02
Macsy 387.38
Psyho 377.22
mhchan 374.90
jakubr 353.71
overwise 330.73
kia 283.48
ACRush 282.62
JongMan 261.44
IvanRomanov 251.33
DmitryKorolev 235.14
Revenger 234.54
elizarov 233.79
evgeni 232.44
antimatter 226.70
CatalinT 226.15
Jan_Kuipers 225.73
krijgertje 225.11
wd.h 221.28
w_ 218.82
zhuzeyuan 217.09
falagar 212.75
MegaS 210.88
gawry 209.13
liympanda 207.74
hyyylr 206.37
skatou 205.00
Vintik 204.09
jasonw 199.82
darnley 199.59
NPermyakov 199.54
aengus 196.67
embe 191.62
Yarin 186.89
NSI 185.22
AdrianKuegel 182.40
nicka81 181.01
HeaDacHe 178.77
VitalyGoldstein 178.37
kappa 175.40
HilbertRaum 168.29
DmitryKlenov 168.26
Abednego 165.51
Rocking 164.38
Per 163.41
Emilian_Miron 158.22
Aidin.Kashigar 156.94
lukasP 156.00
grotmol 152.34
gevak 142.55
nhzp339 130.61
NauCoder 107.71
lazyboy 98.73
WSX 56.89
Snail 25.00
Masao 0.00
blackmath 0.00
.Invader 0.00
Mg9H 0.00
smsorin 0.00
Rostislav 0.00
nya 0.00
lyc1977 0.00
xreborner 0.00
goo 0.00
soul-net -25.00
wintokk -25.00
Ulan -25.00
Bankevich -25.00
madking -25.00
fpmc -25.00
Soultaker -25.00
利用假期空暇之时。将这几年GCJ,ACM,TopCoder 參加的一些重要比赛做个
回想。

今天到了2007 年初的东京,回想一下2007 世界总决赛发生的趣事吧。
ACM-ICPC World Final 2007——Mobile Robot 东京决战
2007 年的东京ACM-ICPC 全球总决赛在樱花怒放的3 月初拉开序幕。成立了一
年的Mobile Robot 凭借2006 年ACM 上海赛区的冠军,表明清华參加了这次ACM
盛会。
记得黄金雄教授在杭州2008 时说。ACM 总决赛的实力分布由原先的美洲独霸
逐渐转向了现在的亚欧争霸。2007 年,相同来自亚洲的上海交大具备很是强的夺冠
实力,欧洲2007 年尽管没有顶尖高手Petr 和tomek 的參与。但是ACM 传统名校
St. Petersburg。St. Petersburg IMFO,Warsaw,Saratov,Petrozavodsk 等都派出了极
其豪华的阵容。尽管在2000 年先后美洲队伍成绩不佳,但是近些年由于众多欧洲
选手的加盟。美洲MIT 等顶尖名校也在总决赛中表现得很强势。
记得。每次世界总决赛以前,TopCoder 的论坛上都会罗列出所有參加总决赛
的TopCoder 选 手名单。

但是我不是很是看重这些数据,因为在很是屡次与欧洲选手切
磋以后,我发现了本身与欧洲选手相比的一个重大缺陷:我參加各种赛事以来。起
初比胜过程中常 常受压力的影响很是大,很是难正常发挥本身的水平。

后来状况有所
好转,在大多数比赛中都能正常发挥本身的水平。

可是,令我感到意外的是,不少
来自西方的选手在 巨大的压力下,反而表现得极其兴奋而能超常发挥出本身的水
平。来自西方的各队,我相信他们仅仅要达到了兴奋的状态,都拥有得到冠军的实力。
去年上海交大总决 赛总结中,他们也提到了本身没有发挥出应有的水平,而IMFO
即便在比赛压力下仍然能够作出8 题。可见他们平时训练实力之强。但是我认为
现场比赛发挥受影响多是少数中国选手的坏习惯,可能不适合用相同的思路分析
欧洲的顶尖高手。
抵达东京:
出发的前一天晚上。我仍然熬夜參加了TopCoder 上的SRM 比赛。竟然是Petr
出的题目。当时我与Petr 的Rating 差距很是小,当时我3 道题目都交出了很是高的分
数,在System Tests 以前遥遥率先。但是500 和1000 分的题目都由于一些很是小的
粗心而失败了。我也失去了在总决赛以前超过Petr 的大好机会。结果到达日本之
后的次日,吃早餐的时候,我就碰到了做为教练来到东京的Petr,他一看到我就
扯前天比赛的事情,汗。现在回忆起来。那场SRM 对个人总决赛之旅确实有不小
负面影响。


抵达东京以后才发现,所有队伍中,仅仅有咱们选择了与所有志愿者衣服颜色
一样的清华校色紫色,开幕式过程当中,不少队伍都把咱们当成志愿者了。
练习赛前一天的晚会很是丰盛,大多食物都是中国风格的。水果也很是好吃。


晚会期间。我见到了众多大陆学校的队伍,当年大陆至少有15 支队伍參加总决赛,
随处可以感受到说着国语的选手。

同一时候还见到了不少TCCC 上出现过的面孔,随后
发现ardiankp 也来參加了。咱们还聊起了ACM 在新加坡(ardiankp 是表明南洋理
工大学參加的)的状况。

相似总决赛这种比赛,我认为选手之间的交流则更重要
了。因为每次总决赛都会集结众多熟悉的ID 但陌生的面孔。晚一些以后,咱们与
北京大学的T2 一块儿打牌,队友geworm 和wd.h 都抽签到了还有一方。他们的牌太猛
了。在加上我和李文新老师的牌都很差。结果咱们慘败。


从正式比赛的前一天的中午開始,主办方组织咱们游玩当地的Disney 乐园。
日本3 月的景色很是美,当地人也很是热情。惟一的缺点就是无论用日语仍是日式英
语都很是难交流。

咱们在Disney 乐园中主要以观看表演为主。没有參与过多的活动。
东京到了晚上有些冷,我嘴唇都有些结冰了,可是发现路上不少日本女高中生还穿
着裙子,敬仰。
正式比赛:
总决赛的队伍是依照学校的音序排座位的,练习赛时咱们发现本身坐在来自
荷兰的上届亚军Twente 大学旁边,刚打招呼就发现他们3 人的最低身高也有190。
听说荷兰女子的平均身高也有180 以上。彷佛认为本身是从小人国来的。
练习胜过程中,我已经丝毫感觉不到娱乐的气息了,现场的紧张气氛已经笼
罩了咱们全队。所有队伍都在抓紧一分一秒熟悉比赛环境,赛场中敲击键盘的声音
已经全然覆盖了观众鼓掌的声音。比赛中使用的PC2 提交系统比想象得稳定,咱们
努力尝试各类功能以熟悉机子上的编程环境。东京的总决赛使用了一个形状奇特的
键盘,由于当时早已养成了自带键盘的习惯。此次总决赛中奇形怪状的键盘对我编
程的速度影响很大。
总决赛正式比赛在次日9 点左右開始,Bill 想尽各类办法活跃气氛。只是比
赛開始前几分钟现场仍是静得可怕,比赛開始5 分钟以后。现场就被键盘声笼罩
直到结束。

咱们回想一下比赛的过程吧,底纹的文字是我比赛后写下的总结:
此次World Final 的题目又基本由编程题组成。多是由于比赛时不够兴奋,
比赛全程都很不顺利。
大概从2003 年開始,世界总决赛的题目风格已经全然倒向以编程题为主的特
点,对此咱们早有准备。只是由于时差问题,还有几天前SRM 比赛由于错两题导
致Rating 跌停对我信心的影响,使我比赛中一直不是很是兴奋。只是比胜过程中。
咱们仍然坚决的採用前面提到过的常用组队模式:
(1) geworm 全程负责读题,思考算法和出数据;
(2) wd.h 和我在比赛前2 个小时一块儿攻简单的题目;
(3) 2 小时后wd.h 就開始死磕难题,我主敲代码一直到3 个半小时左右,结
合wd.h 对难题的把握,你们開始合攻难题。
25 分钟:Problem A,简单地枚举。

可是我生物没有学好,没有考虑父母基因
的顺序问题,错了一次。
比赛開始时,正常状况我会从B-I 中间寻找easy上手的题目。

可是由于有些紧
张,直到geworm 给我翻译A 题目内容时,我尚未读懂不论什么题目,这样的状况很是少
发生。
题目A 的描写叙述,需要一些必要的生物知识帮助理解,可是这些东西我早已忘
记。geworm 花了很多时间帮助我理解这题,我仍是由于没有考虑父母基因的顺序
WA 了一次。只是改过来以后,咱们竟然是所有队伍中第一个经过A 题的。可见当
时很是多队伍也没有全然放开。


43 分钟:Problem B。最长上升子序列。開始算法没有想好,莫名其妙地错了
一次。


假设说题A 的WA 是生物问题。那B 的WA 简直就是莫名其妙。B 就是最长上
升子序列问题。好像刚開始写时我和wd.h 都没有想清楚。写了一个神鬼莫測的程
序,WA 一次以后才改为正确算法。可是当时咱们都没有想到的,总决赛中咱们队
伍莫名其妙的WA 噩梦才刚刚開始。
97 分钟:Problem G,枚举+模拟。这是很是扯淡的一题,题目很是easy看错,我
们由于看错题目错了两次。等看到Twente 大学过了以后才重读题目,找到了正确
的理解,浪费了大量的时间。
G 的题目描写叙述确实不是很是清楚,不少队伍都发生了理解错误,咱们也不例外。
只是第2 次提交错误就不能理解了,当时也不知道出于什么缘由又提交了第二次。
难道是想先抢一个提交冠军吗?当时咱们确实受到了开局不顺利的影响,这样作在
罚时自己就落后的状况更是下雪上加霜。
146 分钟:Problem F。BFS。事实上这题是我发挥编程能力的机会,但是我開始
用了一个很是奇怪的搜索方法,错了一次才改用BFS 过了。


在G 题迷茫而放弃以后。我又尝试实现了F。F 的第一次WA 是咱们Final 之行
的第三次“莫名其妙”了。我也不知道本身用了什么一种奇怪的搜索方法竟然过了
例子,还当即提交了,面对这样的状况我有些着急,表现得很是不冷静。

好在geworm
及时提醒。我当即改为BFS 过了。

在这期间,wd.h 已经实现出了I 题,并提交了一
次。结果是WA。
178 分钟:Problem C,排序+枚举。这题有一个阴险的地方。就是theta=0 的
状况,还好咱们考虑到了。这也是咱们惟一一次AC 的题目了。
C 题的算法事实上很清楚,阴险的状况咱们也考虑到了,我最终没有再搞笑一
次,这也是咱们惟一一次AC 的题目了。从经过C 的时刻讲。咱们的形式仍是很是有
利的。因为难度很是大的I 咱们已经实现得差点儿相同了。
224 分钟:Problem D。数学题。

这题本是一道很是easy的数学题目,但是不知
出题人怎么想的。搞了一些没有不论什么意义的东西。真是此次题目的一大败笔。咱们
開始由于没有注意三点共线的状况错了3-4 次,而后由于int64 越界又错了3-4 次,
最后错了7 次才AC。这题一共浪费了1 个多小时。


在BGF 各一次奇怪的WA 以后,咱们又全然陷在了D 题的陷阱之中,假设顺
利的话D 题仅仅需要15 分钟就可以写完,可是咱们忘记考虑了D 题中很是多的阴险情
况。迟延了1 个多小时。贡献了7 个莫名其妙的WA。可是,当时我并无想到,
这已是我AC 的最后一道题目了。
227 分钟:Problem I。数学+模拟。

这题是Jelly 写的。有很是多特殊状况。
平心而论,我在总决赛上的状态不是很是好,编程速度受到影响,而且有10 次
以上的错误提交。最后咱们7 题的罚时高达1200 多,而上海赛区相同7 题的罚时
仅仅有700 多,从这一点上也可以看出当时实在不在状态。只是,wd.h 很是好地运行
了咱们预约的组队模式,顺利完毕了拖后中卫的角色。在我经过D 题以后,他改
正了I 程序中的最后一个bug。I 题终于也仅仅有咱们和华沙两支队伍经过。可是说
是咱们终于能够得到亚军的杀手锏。记得在颁奖仪式以前,基本上所有选手见到我
都问I 怎么作,我都统一回答:是胡伟栋作的。


咱们依靠I 题的AC 首次排在了榜首。

比赛进行了227 分钟,能够在200 分钟
以后得到领跑的机会,我首次看到了夺冠的但愿。上海和西安赛区的欢呼场面一次
从新从我眼前闪过。当时仅仅有华沙大学经过6 题,其它队伍都还不超过5 题。
可是幸福仅仅持续了短暂的3 分钟,咱们由于罚时太多而被华沙反超,华沙大
学经过第7 题时华沙队员的反应差点儿疯狂,ICPC 的工做人员也用照片记录了这一
时刻。
Problem E。咱们的算法应该是正确的:二分答案+最短路。

但是不知程序犯了
什么错误,没有AC。


Problem H,很是复杂的几何题目。咱们的算法是:扫描。但是不知程序又哪里
写错了。结果是WA,不是TLE。
尽管在接下来的73 分钟时间内咱们没有再过题,只是咱们仍然拚杀到了最后
一刻。拼尽全力而无怨无悔。无论是E 仍是H,咱们都想出了正确的算法,并且成
功写完了程序,但是Judge 给出的结果一直是WA。

咱们不断測试数据,并修正了
一些bug,但仍然不能经过第8 题。

在这样的状况下的稳定过题能力咱们确实特别没
有训练过,华沙能够经过8 题的超强实力确实很是让人敬佩。比赛刚结束时,Petr 还
特意赶来问咱们有没有经过第8 题。ICPC 的工做人员碰巧留下了照片。


当时我很是但愿能够借他的运气获得一个Yes,只是PC2 仍是不断返回WA 直到
最后。
后来,E 题就成了我写计算几何题目的一个巨大的心理障碍,直到2 个月前在
Proxima 的一次训练中,在队友的支持下,我最终成功经过了一个更强版本号的E 题
(题目在UVA 上。题号是11425,这题至今2009.1 也还仅仅有我和东京冠军队的
marek 经过)。


Problem J。这是一道很是复杂的算法题目,现在我还不能证实算法的正确性。
更重要的是这题很是easy实现一些看似正确的算法,可能没有作这题是咱们此次比赛
的惟一成功之处。


I 的算法大体例如如下:
(1) X_i = the mininum cut between V_i and V_0.
(2) while (the graph is not empty)
{
(3) m = min(X_i).
(4) remove all nodes V_i whose X_i=m.
(5) let X_i = min( X_i , m+ the mininum cut between V_i and V_0 ).
}
(6) return X_1.
这里提一个公开的秘密,最后显示华沙大学的结果时,他们成功经过了E 题。
可是比胜过程中,咱们并无看到他们挂起蓝色的气球,不知道来自浙江大学或者
中山大学的选手能不能细致回顾一下,当时大家应该坐在他们旁边。


颁奖:
终于。华沙大学以经过8 题的成绩得到冠军,Mobile Robot 经过7 题总用时
1200 分钟得到亚军。整场比赛,咱们克服了开局的种种不利因素。成为全场第一
支经过7 题的队伍。亚军也是一个很可喜的成绩了。

由于华沙大学不来自亚洲,
咱们同一时候也得到了亚洲冠军。
颁奖仪式以后的表演很是精彩,印象最深的要数那位“神偷”了,他在观众面
前不断施展“妙手空空”,观众掌声不断。记得表演结束后你们等电梯时。那位演
员从咱们身边走过,咱们都连忙确认本身的钱包和手机。

ACM-ICPC 东京总决赛在
一片片掌声中落下帷幕。
总结:
ACM-ICPC 总决赛结束后,Mobile Robot 又恢复了平静。Mobile Robot 成立以来
共得到了两个分区赛冠军和一个总决赛亚军。从那以后Mobile Robot 就宣布解散
了,或许惟一的遗憾就是没能得到一个真正的世界冠军。赛后。黄金雄教授也来向
咱们祝贺,从他的言语中,咱们也感觉到了一丝挥之不去的遗憾。
东京总决赛的几天里,我有机会结识了不少国内外朋友,也是此次日本之行
的一大收获。

同一时候也感谢众多ACM 选手一年来对咱们的关心和支持。当时bbs.pku
上留下了一个很是长的帖子。让我永生难忘。
在现场比赛中,我数次与欧洲选手直接交手。对他们的特色有必定的了解:
(1) 欧洲选手的编程能力很是强。很是适应总决赛现有的题目风格。

有些欧洲选
手在notepad 里敲代码,而后直接提交的事迹绝非传说。
(2) 欧洲选手对于算法的灵活运用能力强,但是对于一些比較深的算法了解
很少。好比这次总决赛的J 题。
(3) 不少欧洲选手的现场抗压能力很是强,即便在最后时刻仍然可以发挥出自
己的水平。
在总结过复旦和Srbga 出题的风格以后,总结一下我理解的总决赛题目风格吧:
(1) Srbga 大哥出的题目和世界总决赛的题目风格近似,题目对编程能力提出
了极高的要求。

相比之下大多数题目对算法的要求不高。


(2) 总决赛题目对算法的考察范围很广。但是对于某特殊的算法要求不高。
(3) 总决赛题目的时间限制很是宽,出题人很是提倡一题多解。

而且数据没有想
象得苛刻。随机算法实用武之地。
东京的总决赛已经结束快2 年,今年寒假结束以后,我又要准备踏上总决赛
征程了,但愿此次咱们Proxima 能作的更好,将总决赛名次提升一位。
附Final2007 排名
Rank Name Solved Time
1 Warsaw University 8 1405
2 Tsinghua University 7 1200
3 St. Petersburg University of IT, Mechanics and Optics 6 866
4 Massachusetts Institute of Technology 6 866
5 Novosibirsk State University 6 868
6 Saratov State University 6 957
7 Twente University 6 1011
8 Shanghai Jiao Tong University 6 1026
9 University of Waterloo 6 1103
10 Moscow State University 6 1192
11 University of Auckland 6 1210
12 California Institute of Technology 6 1241
利用假期空暇之时,将这几年GCJ。ACM。TopCoder 參加的一些重要比赛做个回
顾。最后是2008 年的杭州复出。


2008 年ACM-ICPC——杭州复出
2006 年ACM-ICPC 总决赛结束后,Mobile Robot 就宣布解散了,或许惟一的遗
憾就是没能得到一个真正的世界冠军。宣布退役ACM 以后,我并无全然与ACM
绝缘。每次TopCoder 大赛以前 还常常作一些ACM 比赛调整状态。

记得08 年初,
我也全程观看了总决赛,只是没有想过复出。
杭州复出:
一 切事情要从一个zhuzeyuan 的电话提及,时间是11 月8 日晚上10 点左右。
当时我正在參加UVA 在线比赛而为GCJ2008 做准备。 zhuzeyuan 在电话里首先告
知我Loner 车祸的事情,好在现在Loner 已经痊愈了,当时确实很是操心。

随后,
zhuzeyuan 向我介绍了 2008 年ACM 比赛的进行状况。当时北京和哈尔滨赛区已经
结束。而后,邀请我增长Proxima 參加杭州赛区的比赛。我想当时答应的缘由主要
有3 个:
(1) 我 我的很是喜欢Coding。尽管退出ACM 已经快两年了,但是还经常參加个
人比赛。刚刚结束的GCJ2008 中国区半决赛。出人意料的夺冠加强了个人信心。
另外,ACM 这样长达5 个小时的团队比赛造就了很是特别的环境,赛场上的气氛和
激情是作裁判教练或者參加我的比赛中没法体会到的。


(2) 3 年前的2005 ACM 杭州赛区,我留下了我大学生活中的一大遗憾。对于杭
州2005 的慘败,我一直想寻找机会从那个跌倒的地方爬起来。完全摆脱紫金港校
区留下的阴影。


(3) 事实上另外一个缘由就是我家在杭州,而且在本科期间我也之前到杭州电子
科技大学作过关于ACM 的报告,lcy 老师的热情给我留下了深入的印象。
对于Loner 的车祸,我也认为很意外。这也是对于咱们常年在校园骑自行车里
横冲直撞的警示。Loner 现在能够恢复得这么好,咱们都很是高兴。祝你明年ACM
好运。


增长Proxima 的手续很是顺利,教练邬老师对我复出想法的回答简单扼要:研一
学生可以參加ACM 比赛。
Proxima 的另外两名队友各自是zhuzeyuan 和zhouyuan(周源),我增长
Proxima 以后,新Proxima 前后进行了3 次训练比赛。随后就出发到杭州电子科技
大学參加2008 年ACM 杭州赛区的比赛了。


当 时,我经过不少网上资料和zhuzeyuan 的描写叙述了解了当时清华的战绩。


杭州赛区以前,清华的What’s Up 和IronGods 已经分别得到了哈尔滨和北京赛区的
冠军。

当中IronGods 还得到了哈尔滨赛区的亚军。What’s Up 则一块儿来到杭州參加
比赛。Proxima 在杭州赛区以前已经參加了北京赛区的比赛。成绩是第二名。

就当
时的形势讲。咱们没有资格考虑太多事情。假设想 保留悬念就必须得到杭州赛区
的冠军。


杭州赛区现场赛:
在杭州赛区练习赛那天的上午,咱们抓紧一切时间进行了模拟训练,选择的
题目是NEERC 的题目。题目难度有些大。咱们作满整整5 小时,直到12 点50 才
急忙去吃午餐。结果很是晚才到达比赛场地,到时候练习赛已经開始很是久了。但愿我
们的迟到没有影响旁边队熟悉比赛坏境。


杭电赛场的环境很是好,在赛场里我找回了2006 年上海赛区的感受。

队伍之间
的空间很是宽敞。电脑桌也很是大,足以让3 我的在上面一块儿推导公式。当即就见到
了lcy 老师。只是他带来了一个不太好的消息——不一样意自带键盘。好在杭电提供
的键盘很是标准,对咱们影响不大。
正式比赛在次日早上9 点開始,回想一下比赛的过程吧:
在Proxima 队中,比赛開始时。仍然由我准备编程环境,而后从中间開始读题。
我当即发现了D 是一道看似简单的题目,并且也注意到了这句话:
WARNING: a naive algorithm might not be sufficient to solve this problem.
但是没有想到的是BFS 算法也算是naive algorithm,我交出了全场第一个提交,
结果是理所固然的TLE。只是那句WARNING 略微有些飘逸。


zhuzeyuan 发现A 是简单题目。因而我当即写A。
19 分钟,A:推断两张图的改动距离。枚举全排列,统计就能够。


A 是最简单的题目。由于開始D 的耽搁,咱们大概是全场第4 个出题的队伍。


接着,zhouyuan 发现J 也很是easy。因而我转向J。
28 分钟,J:赞成删点的并查集问题。经过加入新点的方法实现删点。
过了J 以后,排名临时上升到第一位。随后。zhuzeyuan 发现没有新题可写,
因而就開始写C,过程当中。我和zhouyuan 发现G 比較简单。因而插空写G。
50 分钟,G:简单图论问题。開始删点推断错误形成WA 了一次。
59 分钟。C:高精度计算和素数断定问题。

这题是zhuzeyuan 写的。


不到一个小时就经过了4 题,Proxima 得到了一个很是好的开局。

对于杭州赛区
难度的题目,能够在第一个小时经过4 题已经很是顺利了。对于不少分区赛中会出
现不少其它的简单题目的状况,有时能够作到一小时5 题。但是一小时6 题实在太难
了,记得咱们在一次训练比赛中作到了一小时6 题,已是咱们的能力极限了。
接下来我实现了一下B,可是由于发生了理解错误,计算结果与题目要求计算
的结果直接存在反复排列问题,仅仅好把程序放在一边。


随后,zhuzeyuan 開始实现H,提交以后我開始写F。
95 分钟,H:计算几何,假设使用O(n2)的算法需要注意常数不易太大。
105 分钟,F:本身主动机推断相等问题,经过计算差乘的方法能够在
O(n2*|Sigma|)内解决
H 的提交等了很是久。H 的Yes 出来后不久我就写完了F,提交以后也Yes 了。
大概在2 个小时左右咱们作出了6 题,事实上假设不在B 上浪费时间能够更早一些。


在2008 杭州赛区。咱们从新得到了6-4 的率先优点。


如下咱们面临一个比較困难的情况,E 和I 看似都比較复杂,但明确题意的B
和D 都没有想出算法。

2008 年杭州赛区的题目中,基本没有中等难度的题目。所
以咱们经过6 题以后就直接进入了比赛后期。

当时咱们分了一下工,我决定死磕D
题。zhouyuan 负责推B 题的公式。

zhuzeyuan 尝试新题目E 或者I。
个人工做进行很是不顺利。先实现了一个普通的A*算法。由于优化得很差仍是
TLE。现在回忆起来,D 题标准A*算法中使用的那个优化仍是挺巧妙的,至少很是有
艺术感。

我放弃A*算法以后,zhouyuan 彷佛已经推好了B 题的公式,開始帮助我
实现D 题。


163 分钟,D:状态最短路径问题,经过A*算法加一些优化可以轻松经过。
zhouyuan 提出了一个很是重要的优化方法,先经过解方程的方法推断是否有解,
在确认有解的状况下使用双向广度优先搜索,程序写好以后又TLE 了。只是我认为
执行时间已经差点儿相同了。因而。我使用了卡节点的方法,最终在第5 次提交经过
了D。D 题咱们用了大概一个小时左右。这时What’s Up 早已经过5 题,只是由于
他们卡在H 题上,咱们仍然以7-5 率先。
zhuzeyuan 确认E 和I 比較复杂以后。咱们開始合攻B 题。zhouyuan 事实上受到
了我原先错误算法的误导,他获得一些公式来计算繁衍函数,经过繁衍以及原先程
序的结果获得正确结果。只是,从当时的形式看,这样也是很是不错的选择。
程序很是快就写好了。提交以后又是奇怪的TLE。B 题的TLE 和D 的TLE 本质完
全不一样,B 题咱们算法的复杂度是O(n4)的。对于n<=20 的数据范围。时间上应该
没有问题。

因而。我生成了100 组測试数据。发现总共仅仅需要1 秒左右。
在B 题的这一点上,我认为命题人作的很是不合理。尽管此题存在O(n3)的算法,
可是既然把范围出到20,就应该赞成O(n4)的算法经过。

可是命题人一共叠出了
6000 组測试数据,使得咱们的程序超时了。而且在Clarify 中的回答是1000 多组,
咱们优化程序以后仍是一直TLE。当时咱们怎么会想到是6000 多。

至少这里的范
围20 极具误导性。

幸亏,zhuzeyuan 及时想出了一个解决方法——打表。由于对
程序没有信心,打表的15 分钟时间内咱们3 人都仅仅得经过手工计算简单数据来确
认程序的正确性。
236 分钟,B:比較复杂的动态规划,需要考虑4 种状况。
打完表以后提交最终获得了第8 个Yes,时间是236 分钟。距离封版仅仅有4 分
钟。由于6000 组的阴险数据,咱们从第一次提交B 题到经过B 整整用了50 分钟。
而且是3 我的一直在一块儿作。
封版时,咱们仍保持了8-6 的率先优点。

但是接下来,咱们犯下了杭州2008
最大的错误,假设相似的错误在总决赛中出现,咱们将很是可能失去率先位置。当时
咱们没有看到港大挂起E 的气球。因而在E 和I 中选择了I,结果深深地陷在了I 的
无底洞中,直到结束都不能自拔。
I:模拟题,需要考虑的状况比較多。


E:计算几何。计算半平面的交。
现在回忆起来。E 题的难度远没有I 题大,咱们错误预计了I 的难度。很敬
佩赛场上经过E 题的港大和I 题的湖南大学。大家不愧为射雕英雄。
清华2008 战况:
2008 年,清华延续本身在ACM 大陆赛区中的霸主地位, 4 支不一样的队伍得到
了创纪录的4 个不一样赛区的冠军。各自是:
1. What’s Up——哈尔滨赛区冠军
2. IronGods——北京赛区冠军
3. Proxima——杭州赛区冠军
4. ZCS——成都赛区冠军
从ACM 的规则上讲4 支队伍都得到了进军总决赛的资格,清华总决赛队伍的
选拔过程在成都赛区结束的次日就開始了。
从个人角度描写叙述另3 支队伍的状况吧:
What’s Up 是清华第一个得到冠军的队伍,杭州赛区的过程当中,他们以amber
主敲代码的模式进行,在比赛開始阶段体现出了很是强的冲击力,只是卡住H 后的
慌乱略显出组队模式的缺陷。尽管他们在杭州赛区以后就选择放弃了总决赛资格的
争夺。但是咱们都深知他们的实力。后来What’s Up 的成员担任了PK 比赛的裁判
工做。
ZCS 由刚进入清华学习的三名大一学生组成,成员是yuhch123。Cheryl 和
ScaleRhyme。

我參加Proxima 以后没有和ZCS 交过手。只是在Ural 和SGU 上比赛
时看到过ZCS 的身影。

在杭州赛区以后,ZCS 在成都赛区创造了7/7(7 提交7 经过)
奇迹,只是和北京赛区类似的是后期略显经验不足。

随后,ZCS 没有參加校内PK
赛。
IronGods 的组成是OpenGL,ahyangyi 和ghy。在IronGods 成立之初。我一直
很是看好这支队伍。

哈尔滨赛区结束后,记得ahyangyi 还来和我抱怨比赛中的失误,
那道高精度题目确实有些过于复杂(呵呵。只是至少数据没有错误)。

北京赛区的
状况,我是过后听dzx 介绍的,IronGods 依靠最后一小时的稳定发挥,经过3 题,
一举压倒Proxima,Carriage 和ZCS 得到冠军。

可是几天后,我惊奇的发现本身需
要面对强大的IronGods 了。


IronGods 的组合与新Proxima 惊人得类似。IronGods 的OpenGL 与ahyangyi 还
有我和zhuzeyuan 都是TopCoder 上的Target(中国一共同拥有7 个Target。另外3 个
是前辈haha,lympanda 和ZCS 队中的yuhch123,看好zhoujie 成为第8 个,加油
呀。),他们的编程能力与我和zhuzeyuan 不相上下。从TopCoder 的成绩上看,
咱们两人的速度略快。


还有一名队员ghy 和zhouyuan 都很是擅长思考算法,ghy 结束OI 时间比較短。状
态保持得很是好。zhouyuan 对于深刻的算法了解比較扎实(北京的A 很是赞呀!

)。


从配合上说,IronGods 组队时间长,配合方面比咱们默契不少。

咱们重组后
尽管也进行了一些训练,只是在比赛中广泛交流偏少,特别是我和zhouyuan 的交
流,在后几场比赛中才有些成功的配合。
只是从稳定性角度看,咱们稍占上风,TopCoder 上的Volatility 值至少可以说
明一些。

而且ACM 比赛时间长达5 小时,稳定性的要求应该比TopCoder 还高一些。


清华校内PK:
后来,zhuzeyuan 表明Proxima 与IronGods 协商以后。你们决定採用三局两胜
的赛制,并定下了3 场比赛的时间和题目安排。


关于总决赛队伍的选拔,我我的很不同意直接指定,可能与个人一些经历
有关吧。

已经进入研究生学习的我,对參加总决赛已经没有两三年前的激情了。


过我我的的观点是,假设学校指定。我对于4 种结果都可以接受;假设进行PK 选
拔,赛场上我必定拼尽全力。
两场PK 过程当中,咱们都在bbs.pku 上公布了现场的即时排名状况。由于清华
ACM 团队有严格规定要求对两次PK 中使用的题目保密,我这里就仅仅留下了比赛的
大体过程。
第一场PK。时间和吉隆坡赛区全然一样,过程大体例如如下:
Proxima 启动比較快,到2 小时左右就得到了5:2 的率先优点。
题F 是这场比赛中咱们最大的失误,F 浪费了很是多时间,而且最后都没有过。
IronGods 利用Proxima 卡住F 的时机连追4 题,以6:5 反超。
发现IronGods 反超以后,我又尝试了几回F 题,但仍是不能经过。比赛还有
70 分钟结束,而且咱们手上并无其它题目。zhuzeyuan 在关键时候毅然决定開始
写J,记得他说的一句话是“没有时间了。我必须開始写了”,当时形势不容乐观。


好在J 成功1Y,士气大振。
Proxima 随后连过两题又一次占领7:6 优点。
最后,IronGods 追成7:7 平,比赛又打得难解难分。
IronGods 最后时刻也还有机会,咱们从新目击了IronGods 的绝地反击实力,
可能他们最后作H 的选择值得商榷。


第一场PK 过程当中两支队都有明显失误的时期。咱们由于失误在中期,因此罚
时较少。最后依靠罚时险胜。在PK 中占得先机。
第二场PK。时间设在12 月25 日的晚上进行,题目编号从A 到L,共同拥有12 题
之多。第二场PK 比前一场进行得更激烈。过程当中两支队伍都长时间保持了很是好的
状态,比胜过程中屡次交换率先位置:
开局Proxima 起步略快,65 分钟就经过了5 题BDEFK。
开局看似顺利,只是咱们都明确:真真的比拼尚未開始。


Proxima 卡在了H 和C 上,IronGods 经过了BCDFK 追成5:5 平,罚时Proxima
率先。
IronGods 经过了G,首次反超6:5。


Proxima 通过rejudge 经过了H,出现了6:6 平,罚时Proxima 率先。
Proxima 第10 次提交才经过了C,再次得到题数率先7 :6。
假设输掉了此次PK,题C 则是最大的败笔。
IronGods 经过了J。追成7:7 平,IronGods 在罚时上率先。
此时的罚时落后就是Proxima 在C 题上出错9 次的恶果。
Proxima 第4 次提交才经过G,以8:7 反超,但罚时仍是很是大。
IronGods 经过了H。又追成8:8 平,利用罚时IronGods 再次得到率先。
这已是第6 次出现平分了。这时还不到3 个小时,校内PK 赛的题目难度并
不在2008 杭州赛区的难度之下。3 小时的8:8 的高比分平局是现场比赛中很是难看
到的。

而在高比分平局中罚时也是很是重要的,此时IronGods 占领明显的优点。
Proxima 通过rejudge 经过了I,再次超出9:8。


Proxima 经过了J,优点扩大到10:8。


记得题J 的第一次提交開始的返回结果是“Other-Contact Staff”。看到这个回
复以后zhuzeyuan 当即跑到Judge 室。在被工做人员挡住以后,zhuzeyuan 很是奇怪
地问道“难道不是大家让我来Contact 的吗?”。囧死了。

只是很是快就rejudge 成
Yes 了,题J 的经过也从必定意义上逆转了罚时的不利,IronGods 假设想翻盘就必
须在最后一小时又一次上演北京赛区封版经过3 题一幕。
Proxima 经过了A,优点扩大到11:8。


记得最后提交A 题的时候,我紧张得手都有些发抖了。当时仅仅剩下25 分钟,
IronGods 尚未開始写A 和L 两题,因此在最后的时间里他们已经不可能经过余下
的4 题了。A 题的Yes 也就成为了这场PK 的胜利宣言。
IronGods 最后时刻经过了I,终于题数为11:9。
这次校内PK 的激烈程度决不亚于2006 年上海赛区,能够终于赢得这场PK 使
得咱们更有自信地站在总决赛的现场。


首先感谢关心咱们的同窗。记得第一场PK 当天正在举行吉隆坡赛区比赛。
bbs.pku 上仍是出现了如此多的帖子为咱们两方加油。

第二场PK 结束时已是晚上
11 点。咱们手机还不断收到祝贺短信。
向IronGods 三位天王致敬,在PK 过程当中仅仅需稍微的变化。出现在斯德哥尔摩
的就很是多是大家。棋逢对手是我ACM 生涯的一大幸事。相信大家明年必定能够
作得更好。
我想这是清华第一次使用公开的现场PK 方式来选拔总决赛队伍,我的认为PK
的方式除了公平以外还有不少长处。首先。PK 方式能够使得各队伍能够更从容地
选择和准备不一样的分区赛赛区。有效提升学校的总体成绩。其次,经过PK 的过程,
能够增强各队之间的交流,队伍各方面水平能够获得全面提升。真是一箭双雕。
利用假期空暇之时,将这几年GCJ,ACM。TopCoder 參加的一些重要比赛做个回想。包含
今天一共10 篇。接下来的重要比赛就是世界总决赛了。纵观世界总决赛各队。尽管形势不容
乐观,但咱们必定会拼尽全力。
利用假期空暇之时,将这几年GCJ。ACM,TopCoder 參加的一些重要比赛做个回想。
回想GCJ2006。ACM2005,TCCC2006 和ACM2006 以后,今天简要回想一下国内个
人赛场吧。
国内我的赛场——百度之星
国内我的赛场中最重要的比赛要数每一年一度的百度程序设计大赛,到今年为
止已经举办了4 届,每一届我都全身心地參加了比赛的全过程,百度程序设计大
赛是中国举办的规模最大的公开程序设计比赛,其參加人数比不少世界范围的程序
设计大赛的人数还要多得多。另外在2006 年初,Google Beijing 举行了Google
Code Jam China 的比赛,刚刚開始參加TopCoder 的我也增长了此次GCJC 之旅。
第一届baidu 程序设计大赛:
最先的国内我的程序设计比赛要回顾到2005 年9 月開始的第一届百度程序设
计大赛了。源于宿舍走廊中的海报,我以尝试的心态报名參加了第一届百度程序设
计大赛。每一届百度程序设计大赛都由初赛,复赛和现场决赛组成。
第一届百度程序设计大赛中。印象最深的复赛题目就是那道规模巨大的最小
树形图问题了,100000 的数据规模吓退了很多选手,我鼓足勇气提交了一个理论
上能够执行的程序,顺利经过了复赛进入决赛。最小树形图算法在大多图论书上就
接在最小生成树算法后面,但是其程序量远比最小生成树大。而且用途没有最小生
成树普遍,在大多数竞赛中很是少出现。

我最先接触最小树形图算法是在2003 年4
月,当时正在复旦大学训练,记得关于这个问题和xreborner 讨论了很是长时间才得
以证实算法的正确性并实现出高效的程序。
现场决赛于2005 年10 月底在北京举行,由于当年比赛的知名度不高。时间
上还和GCJ 冲突,没有太多的顶尖高手參加。清华大学除我以外仅仅有superzn(张
宁。咱们留shell 一我的參加ACM 北京赛区预赛&#1048623;),当时OpenGL 仍是以高中生
身份參加的,还有复旦大学的xreborner 和young(李阳);中山大学的magicpig,
Savior 和张子臻(很差意思,我不记得您的ID 了,好像杭州2008 的时候咱们还说
起此事)。我一直以为,现场比胜过程的一个重要的意义在于提供了一个老朋友重
逢和结实新朋友的机会。选手之间的交流是比赛中最重要的组成部分之中的一个,我很是有
幸能够在这些比赛中认识了众多牛人。
略微回想一下决赛的题目吧:决赛的题目是经典的8 数码问题,给定初始状
态和结束状态,计算最短需要的转移步数。对于分数一样的状况。依照程序的执行
速度排名。比較easy想到的方法有:
(1) 单向BFS:最坏状况需要1s 左右。
(2) 双向BFS:假设先推断无解状况,这是xreborner 使用的方法,平均状况
大概0.002 秒左右。


(3) A*或者IDA*:先推断无解状况,而后经过距离启示函数搜索。平均状况
大概0.002 秒左右。我当时使用了A*的方法。但不少地方的实现不是很是合
理。
(4) 常量表,这是最有挑战的方法,因为决赛的提交量限制在64K 之内。
现场比赛中。(2)和(3)的使用人数比較多,速度相差无几,选手之间比拼的是
各类细节和常数的处理。后来。我想出了一种速度很快的方法:
首先使用A*加上“卡节点”技术,就是限制A*算法搜索过程当中每层的节点个
数上限,这样的算法扩展节点个数在100 左右。而后。由于上述算法的正确性不能
保证。把所有反例打成常量,程序大概50K 左右。很是easy发现,这个程序的速度
远比比胜过程中所有程序的速度都快得多。
终于个人程序以总时间0.022 秒得到冠军。xreborner 和Savior 以0.026 分并列
第二名。xreborner 的程序很是惋惜,假设增长了无解推断,速度应该比我程序块。
superzn 就更惋惜了,superzn 的飘逸程序事实上仅仅有0.020 秒,但是有一个数据错了。
记得颁奖以后,主持人邀请获奖选手发言,选手可以经过向前走一步选择优
先发言。这时。我忽然感受你们把目光都聚焦到了我身上,向右一看,由于我站在
最左边没有注意到右边的状况。可谁知其它选手都后退了一步。把我留在了看似向
前一步的位置。
第二届Astar-baidu 程序设计大赛:
第二届百度程序设计大赛没有等到10 月。而是在2006 年6 月就拉开序幕。
没有想到的是,第二届百度程序设计大赛竟然以我在一年前比赛中使用的A*算法
的名字命名。感到很荣幸。
记得复赛的题目很正式,印象最深的要数xreborner 招牌式的Zuma,我推
了两个小时公式才获得了正确的动态规划方程,实现以后还由于TLE 仅仅有30 分
(100 满分)。

还有Ying 出的无向图最小割问题。我用网络流算法又超时了。

只是最
后一题。个人程序竟然比xreborner 优化过的标程还快,真是不easy呀。清华的舍
友RealPlayer 在复赛中表现很是兴奋,惋惜由于一个很是小的错误没能进入决赛。
參加第二次百度决赛的选手中有不少熟悉的面孔,清华的同窗包含shell,
OpenGL。lympanda 还有Macsy。

复旦大学也来了很是多选手,当中除了LemonTree
和Topkiller(沈毅)以外,还有我刚到复旦时见过的admin 和funny 的身影。另外
magicpig 和flymouse 也參加了,而且magicpig 和我住一个房间,吃饭时记得他把
桌上所有人的Dev 功底全都歧视了一遍,惋惜PE 不在场呀。比赛前还看到了
Srbga 的身影,据他说是被邀请一块儿来玩的,事实上略微用小脑推断一下就知道必定
是參与出题的,有了Srbga 的加盟。相信决赛题目绝对不会是一年前的风格了。


第二年决赛的题目是:著名的俄罗斯方块。

敲代码玩一个10 列的标准2 维俄
罗斯方块游戏。
Srbga 设计了很是有特点的记分方法和评分标准。对于记分方法。特别的地方是
消去1 行后没有得分,而同一时候消去2,3,4 行的得分各自是3,6,10,记分方法
很鼓舞一次消去多行。评分标准则更奇怪了,有50 种不一样规模的数据。对于每
组数据对所有选手的得分进行排名。前8 名的选手依次获得10,7,6,5。4,3。
2。1 分,也就是说,是存在可能性在測试结束以后分数仍然为0 的。
比胜过程中,我花了不少时间来分析这个奇怪的评分标准。
对于这样的评分标准,常见的策略有两大类:(1)所有数据的成绩比較平均 (2)在
一种数据风格中特别突出呢。
依据数据描写叙述,50 个数据可以分为10 种不一样的风格。參加比赛的总共同拥有50
名选手,假设所有分数是全然平均分配的话。分数是31 分,这个数字意义不大。
但若是设想分数的80%会分配在前10 名中(依据当时选手的水平,这个若是仍是
比較合理的)。这样前10 名的平均分数是124 分左右,也就是说假设想挤进前4。
至少也要100 分以上。假设想争取冠军预计需要200 分左右。假设选择一种策略,
使得它仅仅在一种数据风格中特别突出。分数仅仅有可怜的50 分。而且很是可能有不少
有相同想法的选手。因此(2)不太可取。
在决定选择比較平衡的策略(1)的以后,需要再考虑一个问题,假设终于目标
是150 分。那么平均分数仅仅需要3 分,也就是说每个数据可以赞成有5 名选手超
过本身。这些必要的分析帮助我明白了努力的方向,面对这样的开放性的题目,多分
析题目的特色每每可以达到事半功倍的效果。
另外一个重要环节是调整估价函数,机器学习事实上是一个很是好的策略,惋惜
我当时不会。事实上当时我作的事情,本质上就是人工模拟机器学习,手工调整了1
个半小时。眼都花了。而且我犯下了一个致命的错误,记得记分方法很鼓舞一次
消去多行。也就是说对于平坦的数据。一次消去1-3 行的权值应该可能设置为负数,
而我仅仅把他们设成了0。使得程序对于平坦的数据分数不高。

Macsy 就考虑到了这
一点。仅仅惋惜一个很是奇怪的技术问题(在LinuxWindows 下的CLOCKS_PER_SEC
參数是不同大的。想使用卡时策略时千万不能事先把这个数字取出来设置成
CONST)使得Macsy 没能成功。


由于Macsy 和LemonTree(相同的技术问题)的出局。我在不少数据中获得了
很是高的分数。最后的总分达到了是255,率先了第2 名有99 分之多。事实上现场的
不少选手的程序风格相差并不大,可能我惟一多作的事情就是创建了一个博弈树。
多搜索两层,这样比直接贪心的程序看得更远一些。

后来事实也证实了。排名靠前
的选手大多都是比較平衡的策略。记得lympanda 洋洋洒洒写了1800 多行程序,
在当中一种数据中拿到了满分50 分。只是惋惜panda 的程序平衡性稍差,总排名
进入了前10。但终于仅仅有三等奖。
第二届astar-baidu 程序设计大赛。复旦大学得到了丰收。记得不少复旦的选
手由于考试提早回到学校。颁奖仪式的时候二等奖颁奖一片空场。
比赛的住宿条件可以用无与伦比来形容,很是感谢baidu 的慷慨与细心。记得第
一天晚上还有机会和Ikki 一块儿打沙壶球,面对球风全然对立的Ikki 玩得很是开心。
Google Code Jam China 2006
大概是2005 年底,忽然看到了名为GCJC 的比赛,而且使用的是TopCoder 的
比赛模式。因而就报名參加了。

当时预计仅仅參加过几场TopCoder 的比赛,账号还
是蓝色的,GCJC 第二轮预选赛由于经验不足差一点就被淘汰了。好在有惊无险地
进入到了北京的现场赛。


GCJC 现场的选手中,我认为至少认识80%吧。清华同窗就有7 人:b142857。
fuwenjie,lympanda。Macsy,zig 还有hyyylr(李老师)。复旦的LemonTree 和
TopKiller 也都来了,浙大也来了不少TopCoder 上的元老xuchuan(徐串),
sghao126。
记得。就在GCJC 决赛的前一天晚上。我參加了TopCoder 的SRM 比赛,第一
次踩住了Petr。只是也消耗了太多的RP。

晚上的SRM 比赛中没有人过3 题,第二
天早上lympanda 还把咱们通通歧视了一遍。随后,b142857 还描写叙述他Challenge 过
程中的囧事,由于500 分题目的返回结果需要使用long long 类型,因此b142857
看到一我的提交的程序计算过程当中仅仅使用了long 就果断Challenge 了,结果失败了
两次以后才发现。那我的用的语言是Java。
比赛中250 分题目。简单的几率问题。我写完就交了224 分,竟然是所有选
手中最快的。后面的500 分,我尽管提交是最快的,只是没有考虑一种状况。打
开1000 分题目以后网络就開始很是不稳定了,时断时连。1000 分题目事实上算法很是清
楚。由于网络缘由提交仅仅有600 分左右了。
Challenge 阶段開始时,我打开了房间中lympanda 的500 分程序,发现咱们两
人的程序基本过程全然同样。又打开了一个。也同样。但是在尚未反应过来的时
候,lympanda 的500 分程序被Challenge 了,接着个人500 分也被Challenge 了。


而后就没有什么斗志了。在无奈中等待比赛结束。


比赛结束以后的午餐过程当中,我正好坐在Google 中国掌门人李开复旁边。午
餐快结束时,李开复问起2 个月前的百度程序设计大赛。忽然。鬼使神差地直接
问我百度大赛的冠军是谁?这可是在Google 的老巢呀,抖死了。我当时真惧怕他
听完回答以后直接把我赶下桌:-P。


好在个人250 分和1000 分都Pass 了。由于TopKiller 的1000 分超时了,我获
得了第3 名。冠军xuchuan 和亚军b142857 都顺利经过了3 题。
POJ Monthly Contest
大概是从2004 年8 月開始,POJ 上開始举行每个月一次的有奖月赛。2005 年的
月赛中,每次都有机会同xreborner。Ying 等高手切磋技艺。从2006 年初開始,我
已经比較熟悉了比赛的题风,连续得到了不少次比赛的冠军。并且保持了良好的个
人比赛状态。
记得2006 年4 月底,在POJ 的邮箱里忽然发现了hawk 的信。他问我五一长
假回家的状况。

我告诉hawk 本身定在周五晚上出发。

因而,次日早上就看到比
赛安排中:2006 年5 月份月赛安排在了周五晚上,太囧了。


后来,POJ 上直接出现了一系列奇怪的定义,但事实上结论就是我不能以正式身
份參加月赛了。现在这些定义早已成为笑料了,但是我不參加月赛以后,仍然有
ahyangyi 这种选手夺走了绝大多数的冠军。
后两届baidu 程序设计大赛:
从第二届開始,咱们习惯了在每一年6 月等待astar-baidu 的开赛。2007 年最出
乎意料的就要数CS 这个决赛题目了,我在关键的买枪环节犯了重要错误,太迷恋
AK47 了。祝贺师兄lympanda,Macsy 还有shell,不愧是真金不怕火炼。
第四届百度大赛我參与了预赛和复赛的命题工做,但是没有參与决赛的命题。
决赛题目是一道关于直升机的题目,印象最深的是ahyangyi 使用了一个很是有进攻
性的策略。假设採用淘汰赛。可能就是冠军了。

对我来讲,经过现场比赛,有机会
和老朋友重逢。并结识了不少新选手是我最大的幸事。


利用假期空暇之时。将这几年GCJ,ACM,TopCoder 參加的一些重要比赛做个回想。


今天总结一下国际我的赛场吧。
国际我的赛场——三大赛事
ACM-ICPC 总决赛结束后,Mobile Robot 就宣布解散了,或许惟一的遗憾就是
没能得到一个真正的世界冠军。宣布退役ACM 以后。我仍然连续參加了那以后的
每一场世界范围的现场编程比赛。依照时间前后各自是:TopCoder Open(简称
TCO)2007,TopCoder Collegiate Challenge (简称TCCC)2007。TCO2008 以及Google
Code Jam(简称GCJ)2008。

每次比赛,我都度过了一段美好快乐的时光。


TopCoder 公司与三大赛事:
TopCoder 公司大概在9 年前成立,成立的缘由有些让人匪夷所思。听说公司
创立者原来是还有一家IT 公司的大股东,在把原来公司的股票转手以后换了一笔钱,
开设了TopCoder 公司。然而Topcoder 和原来的IT 公司有一个重要协议,就是
Topcoder 在创立之初的两年内不得从事软件开发的工做。

因而TopCoder 在前两年
时间内以相似竞赛的方式从事软件开发的活动。通过9 年的发展,现在TopCoder
公司已经基本由算法竞赛转向软件开发了。
TopCoder 公司除了在网上举办SRM 以外。每一年还举办TCO 和TCCC 等现场赛
事(固然还有TCHS,只是规模比較小。參与面也不是很是大)。TCO 和TCCC 分别在
每一年的6 月和11 月举行,每次大赛都能汇聚众多国际编程高手。另外,Google 公
司从2000 年開始,先在各大洲举办名为Google Code Jam 的比赛,从2002 年開始
也举办全球范围的Google Code Jam。因而这些年来。你们一直把TCO,TCCC 和
GCJ 称为三大赛事。


2007 年以前的GCJ 都是使用TopCoder 的比赛形式。Topcoder 的算法竞赛有点
相似于IOI。ACM-ICPC 之类的竞赛,题目是同一个类型的。每次比赛三道题目,一
般分数分配为250-500-1000。比赛分为Coding,Rest。Challenge 和System Test 四
个阶段,时间各是75 分钟(现场比赛85 分钟),5 分钟,15 分钟(现场比赛10
分钟)和不定。


TopCoder 的现场比赛都由3 个阶段组成:所有选手被分为3 个组(称为
Room1。2。3),每组分别进行半决赛。每组前2(或3)名直接晋级决赛,3-6 名晋
级 wildcard 比赛,wildcard 比赛12 人中的前两名填补决赛的最后2(或1)个名额。
决赛由8(或10)名选手參加。

由于三大赛事的比赛形式相 差不大。每次现场决赛
的选手中老是有许不少多熟悉的面孔。
三大赛事的波荡起伏:
可能细心的同窗能够发现疑问。在文章最開始的一段中,我代表本身在2007
年以后没有错过不论什么现场赛事。那为何没有GCJ2007 呢?事实上缘由很是easy,
Google 公司在2007 年整年中仅仅举办了面向美洲的比赛,没有举行面向全世界的公
开赛。

GCJ2007 的搁浅也使得整个2007 年仅仅有TopCoder 公司独自举办世界大赛。
但是。当你们觉得GCJ 将在记忆中淡去的时候。GCJ2008 又一次登录,而且新的
比赛环境与形式给选手以面目一新的感受。

这里先谈谈本身对这样的新比赛环境的看
法吧:
GCJ2006 仍然使用的是TopCoder 标准形式,也就是说和TCO 以及TCCC 全然
同样。用一句话归纳就是Coding-250-500-1000-Challenge-SystemTests。


GCJ2008 比赛环境结合了ACM,TopCoder 还有IPSC(ipsc.ksp.sk)等多种比赛的
特点。


(1)每道题目分为Easy-Hard 两组数据,并且数据可以下载到本地。这点好像与
IPSC 很是类似,还有一个与IPSC 的共同点就是,不限制选手使用的编程工具,包
括肉眼观察或者人工搜索。


(2)Easy 数据则和ACM 很近似,即时提交评測,并且也设定了每次失败提交
加4 分钟的罚时。
(3)Hard 数据则更像TopCoder 的形式了。Hard 数据由于是统一评測,System
Tests 可以有效
地把悬念保留到最后一刻。
GCJ2008 的比赛形式是一种大胆的尝试。并且也已经有了很是理想的结果。


另外,值得称赞的是,GCJ2008 中首次使用了分各大洲进行当地现场半决赛的
赛制。使得排在前500 名的选手得以參加各大洲的半决赛。也拉近了Google 公司
与选手之间的距离。从还有一个角度来讲,各大洲半决赛的方法很是有效保证了决赛选
手的水平。

平心而论,TopCoder 现场比赛前的最后一轮网络淘汰赛对选手的压力
很是大。就连Petr 在2007 年都直接来了一个“滑铁卢”,连现场赛都没有进。而现
场比赛的公平程度远超过网络赛。因此经过现场赛决定决赛选手可以必定程度上提
高决赛选手的水平。至少我我的很是赞同这样的作法。


搁浅的比赛无独有偶。多是受到了2008 年全球经济危机的影响。TCCC2008
也停办了。而且咱们都认为,TCCC2007 很是多是TopCoder 举行的最后一次TCCC
了,固然TopCoder 这样作没有不合理的地方。
TCO 则相对稳定一些,就连每一年举行的地点都不变,TCO 连续3 年在著名的赌
城Las Vegas 举行。

今年应该也不会改变地点。
三大赛事的举办,我认为选手最大的受益就是,比赛提供了一个到美国免费
游玩的机会。

我前后去过7 次美国,当中6 次都是參加编程比赛。

经过比赛的机
会,咱们得以开阔眼界,结交朋友。我我的真心但愿三大赛事能够继续举行,但是
2009 年秋天的TCCC 和GCJ 很是可能同一时候停办,这也是一个不可回避的问题,让咱们
拭目以待吧。


美国之旅:
从2007 年以来的4 次现场比赛,尽管每次比胜过程中都有一些遗憾,但是现
在回忆起来都有不尽的乐趣。
TCO2007 是我第一次到达赌城,一下飞机就看到很是多赌场(CASINO)。可谁知
TCO2007 整个比胜过程就是一场巨大的赌博。我当时由于不熟悉Texas Hold'em 的
规则,在半决赛中搞错了Flush 和Straight 的大小关系,结果初上赌场就倾家荡产
而被淘汰出局。TopCoder 比赛中竟然出赌博有关的题目,果真有Las Vegas 的特点
呀。只是在赌场里。我细致研究了不少赌博游戏的规则,而后写了几个程序计算赌
博的指望,但是发现标准几率模型下所有游戏的指望值全是负数(事实上挺显然的),
因而,也就以娱乐为目的和lympanda 切磋了一下。
假设说TCCC2006 的Room1 是中国的胜利。TCO2007 的Room1 则是中国的失败
了,尽管Ying 和lympanda 都进入了wildcard,可是都由于一些小失误输掉了此次
赌博。赛后lympanda 请我去牛排馆吃饭。后来那个牛排馆也成为每次TCO 比赛我
们中国选手的主要聚会地点。


TCCC2007 的小组赛还比較顺利,我轻松击败了gawry,Per。marek.cygan 得到
小组第一挺进决赛。

可是决赛中,我为了提快速度以超过Petr,再加上有些紧张。
最后500 分和1000 分两题又都挂了,落到了第5 名。

TCCC2007 地点设在了奥兰多,
比赛结束后咱们到附近的Disney Land 去玩,那里的惊险游戏比国内刺激得多,有
些远远超过个人极限,咱们一行人一直玩到深夜才返回。不少选手还一块儿到奥兰多
魔术队主场观看了NBA 现场比赛,惋惜最后一节成为了垃圾时间。


TCO2008 我也依靠飘逸的1000 分题中800+分的提交闯入决赛。

决赛前我还和
visualage 聊天。夸耀本身历来没有所有题目全挂,更没有拿过负分。

可是在随后
的决赛中。这两个“梦想”就都实现了,PE 对个人评价是太紧张了。基本每次
TopCoder 现场比赛都能见到PE,谁知他每次怀疑我某些题目的正确性的时候,我
的程序就必定是错的。假设下次我參加决赛。您就不要再看我程序了吧(呵呵。开
个玩笑)。
只是在决赛Challenge 阶段的最后时刻,我从第一视角目击了Petr 和Tomek 的
巅峰对决。

在还有15 秒钟结束时Petr 还落后Tomek 大概30 分左右,Petr 成功
Challenge 了一个超过了Tomek,但是Tomek 利用短短的10 秒钟也提交了一个成
功Challenge 又超了回来,谁知Petr 获得这个信息以后又提交了一个Challenge,可
是运气稍差,假设那个数据用来Challenge 个人程序的话,Petr 就行在最后1 秒
再次夺回冠军的位置。能够到最后一秒还能有机会成功翻盘的必定是神通常的人物,
能够把神通常的人物逼到最后一秒的也必定是神通常的人物,两个神通常的人物你
来我往,为你们上演了一场精彩的比赛。
欧洲独霸:
从新引用黄金雄教授在杭州2008 时说的话。ACM 总决赛的实力分布由原先
的美洲独霸逐渐转向了现在的亚欧争霸。但是,我依据这些年的比赛结果发现,从
2006 年開始,团体比赛和我的比赛。特别是我的比赛。欧洲选手一直保持着绝对
的霸主地位,亚欧争霸的说法实在有些牵强。
从2005 年開始,差点儿所有三大赛事的冠军都是欧洲选手。

成绩最好的要数俄
罗斯,俄罗斯选手以Petr,andrewzta 等为表明。俄罗斯选手训练刻苦,编程能力
极强。欧洲的还有一霸主就是波兰,波兰选手具备很是强的灵气,以tomek,marek 以
及Eryx 为表明,程序设计在他们手中体现出了艺术气息。


前几天我也看到关于取消NOIP 保送资格的文章。我没有发表评论,因为我没
有看懂,为何文章里把保送和保送资格混为一谈,让人认为啼笑皆非。

这里我对
保送资格仍是想法很少,只是想比較一下咱们中国选手与欧洲选手思惟能力上的差
别。
在高中时,吴文虎老师就常说中国选手的IOI 成绩很是优秀,的确这几年从IOI
成绩上看,中国是绝对的霸主。

可是ACM-ICPC 的成绩,俄罗斯和波兰等强队的成
绩却远在中国之上。因而咱们总结的缘由是:欧洲选手的编程能力强。我很容许
这个说法。


但是“欧洲选手的编程能力强”的说法并不说明他们的算法能力弱,相反他
们的思惟素养很高,他们具备很正统和严密的思惟方式。体现出通过长期训练
的思惟能力和素养。


我 认为中国的“高手”和不少经过高考进入名校的“神人”,在大学以前接
受的教育都是以选拔为目的的,并无太多针对思惟方式和能力的训练。记得小学
要考重点 初中。初中则拼搏重点高中。高中期间则梦想名牌大学。而在学习期间,
咱们并无太多机会训练本身的思惟能力,至少在个人中学阶段是这种。尽管很是
多高中已 经不遗余力经过相似研究性学习的方法锻炼咱们的创新能力。但是仍然
不能改变选拔性考试“高考”这一事实。

而在与西方选手交流的过程当中。我认为许
多思惟能力 优秀的学生很是早就有机会接受系统的思惟能力训练。寻找最适合本身
的思考方法。

我一次有机会看Eryx 留下的草稿,发现他考虑问题有很严密的过
程,从理解题目到想出算法每步都有根有据,并不是随机碰撞的结果。
现在欧洲选手与咱们相比。思惟能力上也并无劣势。

我有幸在投身OI 竞赛
以后,获得不少机会与其余选手交流,学习他们的思考方法,努力锻炼本身这方面
的能力。试图与众多欧洲选手对抗。


Mountain View 登顶:
GCJ2008 在Google 总部Mountain View 举行。赛前我想用Ying 的一句话来表
达我对照赛夺冠的渴望。“我尽管获过很是多奖,但是缺乏一个世界冠军”。早在
GCJ2006。我就拥有机会得到冠军,但是在失去那次机会以后一等就是整整的两年。
比赛開始不久,bmerry 的强势起跑使我逐渐失去了夺冠的念头,仅仅得一心作
好眼前的题目。bmerry 在不到2 个小时的时间里就作出了除了C- Hard 之外的所有
题目,他仅仅要在最后一小时作出C- Hard,就基本上可以锁定冠军了。
只是我克服开场的不顺利以后,磕磕碰碰地在2 小时过5 分顺利经过了E-Easy
和E-Hard。

摆在我面前的仅仅有B-Hard 和C-Hard。

B 题和C 题相比之下,B 题我已
经有了必定的想法,可是C 则是全然没有想法。因而我决定先作B,GCJ2008 的B
题简直是个人克星,我前后用了100 分钟时间作这题都没有结果。可以说当时状
态很是差。大概到了2:40 的时候,我查看board 时忽然发现了一件使人窒息的事情。
bmerry 已经尝试了C-Hard 并且超时了。由于C-Hard 的分数略高于B-Hard,我最后
想要超过bmerry 就必须作出C-Hard。果断放弃B-Hard 以后,并无想出C-Hard
的方法,写了一个搜索程序但是内心很是没底,Hard 数据的提交时限是8 分钟,于
是到了2 小时52 分的时候,我毅然打开C-Hard,用搜索的程序执行C-Hard,在焦
急的等待以后。程序在执行了1 分多钟之后奇妙地执行结束了。

我依靠搜索方法
经过了C-Hard。一举超过了bmerry。

1 分钟后zhuzeyuan 也作出了相同的题目,超
过了bmerry,由于罚时排在第2 名。

我和zhuzeyuan 还有bmerry 比胜过程中都有
不小的失误,我很是有幸把失误的损失降到了最低点。最终得到了第一个世界比赛的
冠军。
此次GCJ 的题目有很具体的解答,可以在比赛的连接里找到。GCJ2008 的比
赛结果从必定意义上,打破了欧洲选手多年的独霸场面。加上原籍南非的bmerry。
前五名中都没有出现欧洲选手的名字。这也是在多年现场比赛中没有出现过的。
这一年,我很是高兴看到OI 选手中出现了ahyangyi,yuhch123,Loner 等各方面
都极为出色的新人,真心但愿大家能够早日适应大学的学习生活,再创佳绩。


众多新人的加盟,大大提升了清华ACM 团队的实力。在2008 年,清华大学
ACM 队创纪录地得到了4 分区冠军。

最后,评审将共享明天ACM-2008
有趣的发生。

版权AC Rush整个。本站仅为转载。感谢场上领袖。

欢迎广大业主关心的我的博客:吉尔博客

相关文章
相关标签/搜索