查看文章
 
2009 acm-icpc 上海现场赛
2009-10-27 1:30

前言:
两周前的合肥赛,yukkuri在强队不多的情况下拿到了宝贵的金牌。但我们丝毫没有松懈,在这两周的内部训练都拿了第一。我也在这两周学习了些新的算法,写了些前辈们的推荐题,只希望在上海赛能够为队伍多出点力吧。

热身赛:
五个小时的热身赛,可惜只有三道代码量不大的题。B是一句话就搞定的输入输出题,寒仔搞定。A是求字典序最小的完备匹配,竟然几天前我刚写过类似题,于是shi哥交给我写。本想用一种更高效的方法,每次dfs增广一次而不是重新求一遍匹配,但还是不够扎实,考虑到n<=10,退而求其次,写了好一会儿才写好。这时shi哥的C数论题推好了,过了样例,然后我多余地想了一个错误的case...看rank相当强悍,第一名在18分钟内搞定了三道题!

为了熟悉环境,我又写了两遍A,先是用dfs暴力,想必很多队是这么ms掉的;又用了dp,写起来也不繁,这样就当写过了三道题吧~后寒仔爽了一把比赛系统,其它我们也没干什么了,玩游戏打发了剩余的大部分时间。

正赛:
东华大学的组织比中科大严密了许多,一进场就有工作人员对着话筒大喊“不准把手放桌上”,弄得很紧张。可之后另一喜欢说英语的人员在宣读注意事项时,尴尬地发现话筒坏了,说话一断一断的,没什么解决办法,只好一秒钟说一个字,弄的全场乐了。

随着主席黄金雄的倒计时结束,比赛在十点整开始了。寒仔上去配机,我和shi哥先看题。

J有些长,先看H,迷迷糊糊没看太懂,看来还是紧张了,转而看I,给出两条直线上一些点,两点距离即为边长,求这些点的最小生成树。J是劲乐团模拟题,规则较多,但发现数据很小,直觉认为可做。

shi哥发现A就水题,讲了题意,16个点的状态变换,想让我或寒仔去写,也许是我有写第一题的阴影,加上题意没完全听懂,没敢接,寒仔便上去写了。他肉出了这个图的邻接表,结果每个点都漏了一条边,于是只好我在纸上加上,又再人肉check了两遍,费了好些体力。提交后WA了一次,我问了下题意后他发现错误,改后在第45分钟ac。不过此题有队10分钟就过了,我们的开局并不好。

之后shi哥自己在写B,我和寒仔互通了题意:

C是给定字符串压缩的表示,问两串的第一个不同位置。此题一直没有想过,据说冠军队在最后几秒才通过,Orz...
D不知具体题意,shi哥只交待了要求x^q = a % p,直接无视了。
E是模拟俄罗斯方块,数据范围较大。可惜之前网赛有类似题没写。
F是给定类似数独的前几行,求加一行的第K种方案。考虑到K较小,寒仔提出直接暴力,我持疑。
G长达七页纸,赛后据说是我们在火车上常打的升级,不过连最爱mg题的Fire教练也认为不可写。
H是三维空间里40个点的图,求最大独立集。三维几何,直接无视,ym敢写的bitset(orz...)

我们讨论了下J题,一直没想好长条的处理方法,只能暂放。寒仔强烈感觉F题可以暴力搞,我虽不认同,却也无法给出个简单的反例,考虑到直接写的代码复杂度很低,便说不妨一试吧。

后shi哥的B题似乎遇到点麻烦,便与我说了题意,由于他已想了很远,说题意并没多大效果,直接说了方法,然后就发现了bug~提交后在返回WA的情况下,仍与我讨论完了J才回去改,在1小时50分钟ac。没想到快两个小时,我们才过两题;环顾周围,普遍也是两题,偶见三题和四题的,可见今天比赛的难度还是挺大的。

此时寒仔的F也见缝插针写好了,果然是TLE,便放弃之,只见rank里F一片1次提交的……

场上逐渐的IJ都多了,shi哥与我第二次讨论J题,难道这次比赛我从头到尾都在想J……后我把所有条件都告诉他,其中有一条是,“可以同时按下与释放”,shi哥马上提出对于散点可以贪心地一一判断按不按,我们就照这个思路想下去,用0表示松开,1表示按着,转移时先松开所有长条的尾键,再一一地按散点,再枚举新按的长条的头键,三个阶段,复杂度在1000*2^14。对于这种复杂度,shi哥并不乐观,先去想I了,我继续yy,并准备写。

I题他们猜测,每个点只可能与周围四个点连接,再求一次普通的最小生成树。ms代码并不好写,我便在一旁对J题进行最后的准备,肉了所有的样例,可惜仍然没有发现我们误解了题意,即任意时刻,每个按键的状态只能有一种,不能切换。直到I题在三小时1Y,太令人振奋了,因为这题正确性首先不能保证,加上涉及浮点误差其实不好写,很不容易。

后终于轮到我上机了,这一刻却也不那么紧张。谨慎起见,代码多处用了assert,看来是一个不错的选择,dp部分也用了常数可能较大,但更清晰的写法,保证不易出错。敲完后听见他们想写E了,便打印调试,等了好久才送来……发现错误改后,接着打印……由于送纸太慢,同时队友也在用机子,两次修改等了挺长的时间,终于才发现我们的方法连样例都不能通过。shi哥在写很麻烦的俄罗斯,无暇顾及了,我必须自己接着想出来;寒仔曾想帮忙debug,因为是方法错了,我简单说了下后,发现自己也说不清了,便说我自己来,本以为简单改下就行,但想了很久都没结果,渐渐有点慌了。眼看周围很多三题甚至两题的队伍都升起了J的蓝色气球,我们绝不能缺少J题!我也因此坚定地认为J不会太复杂,时限不会太紧,于是先想出个正确的方法再说。在状态转移时,先松键,枚举按键时分为短按与长按,估计了一下复杂度仍然约为1000*2^14,兴奋地上机写了。然后发现过不了样例,问过他们大概E题也需要上机调试后,我便先占着机子想一会儿,意识到长条的头键也可以用短按,稍作修改便过了样例,太兴奋啦!紧张地加测两个case后便提交了,然后返回yes,忍不住惊叫了一下……赛后fzu的wzc很谦虚地说,他们有一题的复杂度10^9也过了,我才意识到其实我也是这个复杂度=_=b,因为当所有键都是长条时,枚举转移的复杂度是2^14,总复杂度是1000*2^21!不过这是极端case,不可能每个case都这么特殊,而且一般的情况有效状态并不多;当然啦,最主要是过这题的队太多了,以致我放松了对复杂度的估计,我不相信连两题队伍都能过的题我们不能过。

过了J后,shi哥便可无顾虑地调E了。此时比赛只剩40分钟,我向寒仔了解下E的搞法,用到了set和链表来加速,挺复杂的没听懂。不过每个方块的四种旋转都是人肉出来的,这点值得商榷,因为即费时又易错,况且人肉去重对效率并没有帮助,后有一处错误就因为误以为L只有两种状态。大概因为用了链表和set,很难调试,便让寒仔用了gdb,很方便地找到了异常的地方。最后半小时我坐在一旁,发现帮不上什么忙了,只得暗暗为shi哥捏一把汗。想起训练时有好几次都是最后时间一直由shi哥在写很肉很繁的题,基本上都能调出,虽然有时会很艰难。但眼看着时间越来越少了,然后很不幸地在剩十五分钟时,shi哥发现算法有一处错了,要加一个线段树来处理,这不简直宣判了死刑?然后shi哥竟去卫生间,等回来时只有十分钟左右,他说先暴力地实现吧,然后在跑出正确答案后,又对着sample很仔细地检查每一步中间过程,直到确认无误后在剩不到3分钟时提交。当返回yes的一瞬间,我们真的太激动了,三个齐刷刷地跳了起来,周围的队伍都看了过来,心想他们一定很羡慕吧^^shi哥也很难得如此激动,甚至有些激愤,可以想象这题的调试让他多么的纠结。

于是我们就这样以平均一小时一题的速度通过了五题。由于遥望见清华队前升起的8个气球(Orz),我并不太乐观,但愿能拿个金牌吧。晚上领奖前才得知,前几名的题数大致是8,7,6,5,5,5,4,4,4……而我们只wa了两次,5题中罚时最少。虽然题数上相差巨大,这样的排名我们还是可以接受的^^。想想清华队三人个个都是条龙,而我们只有shi哥一条龙,有差距也是正常的嘛。这次题目大概也偏难了些,以致强弱分化太明显,12个金牌中从8题到3题,据说速度快的1题也能拿银牌……


后记:
yukkuri的两场比赛都以胜利结束了,虽然与强队还有很大的差距,但考虑到组队的模式,较之前期我们已经进步了很多很多,配合上也更为合理。yukkuri的使命完成了,下一次与shi哥组队不知将会是多久以后了吧……

今年的比赛算是结束了吧,从七月开始的训练,很充实,很值得回味……只是,当这些都成为回忆以后,不禁要问,下一次比赛(如果还有的话),将会在哪里,将会是何时呢?……


类别:acm-icpc||添加到搜藏 |分享到i贴吧|浏览(505)|评论 (0)
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
     

   
帮助中心 | 空间客服 | 投诉中心 | 空间协议
©2012 Baidu