2016亚洲区域赛 大连站总结

ACM第一块银牌,一个良好的开端! 

  周五下午就匆匆忙忙的赶去大连,路途很长,先赶到了烟台,在从烟台做的轮船到了大连,一路上虽然很累,但都在聊各种话题,还是比较开心愉快的。

  先说些题外话,到了大连才4:30,大清早的就赶去大连海事大学,可是早餐都不开门,只能六个人在超市里吃泡面(现在想想还是很搞笑= =),然后一上午等着报道,吃午餐,中午没有睡觉1点左右就去看开幕式,打热身赛了!

  先说说热身赛吧:

  热身赛总共五个题目,我们拿到手后,我从前面开始读题,ZS从中间读,WJH在后面读,我先读出了B题,B题应该算是一个几何题目,但是由于我的问题,一个暗含条件没有读出来(题目中说的正方形是可以倾斜的,而我理解成了只能是水平的),导致给ZS限制思考的空间,他想到了二维树状数组,由于这种类型的他写的少,导致题目是边写边思考,而且思考很久,然后WJH读出了E题,E题是刘汝佳算法竞赛入门经典 的一道原题(例题6-22 UVa 11853 战场),考察dfs,这个题目我们两个人都做过,但是由于时间太久了(而且还没带紫书,由于是热身赛,我就只带了邝斌的模板书),我们也有所忘记,我们只能在现场去推到解法。推了大约十分钟ZS还在想二维树状数组(其实方向就错了),但是我们推出了解法,也验证了想法的正确性(其实我们想的解法和正解还是有些出入),我就上手去敲,大约有20分钟,我们写完了,但是可能想法还是不够好,我们一直TLE,然后就尝试剪枝,这就导致了剪枝过头还是没过头的问题,就一直在WA和TLE之间徘徊,ZS最后虽然写好了二维树状数组,但是题目理解有问题,也是一直WA,由于只有两个小时的时间,我们也只能研究这两个题目了,最后我们也一直没过。

  这次的热身赛打秃了,原因有很多:

  先说说外部因素吧,那一天,我们状态实在是不好,我们从4:30开始下船,早上加一上午都在奔波,领完比赛服回到宾馆换了衣服就12:40了,开幕式在1:00,我们只能匆匆忙忙去看开幕式,在现场开幕式,我们三个人都趴在了电脑桌上睡着了(实在是累!)

  其实感觉最大原因还是在于自身:首先我就有很大的责任,给队友读出了一个错误的题目,方向错了,努力都白搭了,其次自己的学习过程太浮躁了,我们的学习过程基本上就是学习紫书嘛,但是那个题目做过去了,自己一点印象都没有,推了很久推出了一个还是有很大出入的解法,说明题目的思想还是没把握住。在搜索方面还需要勤加练习,其实这一点在比赛前一两周就已经在积极改正了,改正方法就是多多看做过的题,不看题解一点一点的在做一遍。这个题目给我最大教训就是书要一点一点的学,而不是找水题去做!!!!!

  由于热身赛的原因,我的心情很是不好,好在队友们都还是比较开心的状态,还好没有被我的消极状态所影响,我们打完热身赛吃完晚餐,我们就出去玩了(现在想想真是一个明智的决定),我们来到了星海广场,我们玩了很多,完全把热身赛消极心情抛在了脑后,回到旅馆后,我们洗刷后躺在床上了,又聊了很多,就这样劳累的一天过去了!

  第二天正式赛,我们来到现场,精神饱满,对比赛充满了自信,等待着考验!

  我还是一如既往的在前面读题,ZS在中间读题,WJH在后面读题,读题真的和状态有很大关系,我很快正确读出了ACD三个题目,但是我没有立即和它们讨论,因为这些题目,算是所有题目中比较长的了,WJH 告诉ZS读J题,J是一个签到题,很快写完了,又读到了I题,I题稍加分析后 也是一个签到题目,这样我们20分钟内两发1Y,打了个很顺利的开场!

  这时候第一名开了H题,但是也有人开了D题,开D题的人,是我们的兄弟队,D题是一个数学题,我们想应该不是很难推,但是我们一时还没有想好,我们就选择了研究H题,H题我们没有找到合适的规律,最后我们暴力过了H题,在去研究D题,D题ZS给出了一个猜想,并且样例适合这个猜想,我们就大胆去写了,事实上那就是一个正确的猜想,很快的出掉了D题,现在就四发1Y了,ZS从头到尾一直对A题的题意不能理解,我只好和WJH研究A题,因为我感觉题意说的很明白,所以说我觉得A题不是一个难题,A是一个二分图染色,判断是否冲突,我想用并查集 + bfs去做,但是WJH想法直接bfs了,而且讨论的也很清晰,我们就采用了直接bfs的方法,敲了10多分钟又一次1Y,说实话这个题目确实让人产生歧义的感觉,因为我们对面的队伍很厉害,他们到最后都在抱怨A题说的无法让人理解,但是我们把题意弄的很清楚,那些歧义我们想的也很清楚!所以说算是比较幸运的了!这样我们就五发1Y了,第六个题目F题是铜牌题目,但是我没有读这个题目,ZS想了想觉得并不难,就自己写了,然后这个题目有一个坎,那就是需要乘法逆元,这个题目需要除法的取模,只能用逆元了,我们清楚,如果mod不是素数的话,求逆元会比较麻烦点,我虽然做过不是素数的逆元求法,但早已经忘记了,但真的很幸运,这个题目的mod是素数,如果是素数的话,那就简单多了!(A/n) % mod = A % mod * quick_mod(n,mod-2,mod);只用到快速幂即可了!通过这个铜牌题,给了我很大的感触,那就是分工合作太重要了!这样我们又1Y了一次,我们的兄弟队就是因为没有接触乘法逆元,而是采用其他的方式代替它,一直TLE,无缘铜牌!真的感觉很幸运! 最后一个题目是G题,银牌题目! 是一个树形状态压缩dp,ZS也算是比较擅长状压DP了,但是ZS想的dp 一直不敢写,它计算的复杂度是50000 * 128 * 128,题目给出的限制是5S,极其容易超时,这样一直想了比较长的时间,因为状压dp在树上进行的,他的做法是找到一个节点,枚举经过这个点的一个状态s1,和另一个状态s2,如果它们合起来是满的话(1 << k)说明可以从一边走向另一边这样在进行转台转移,我就想到了一个小小的优化:先预处理所有128种状态,用邻接矩阵就像建图一样,给状态进行建图,虽然算不出具体复杂度来,但时间上的优化肯定是有的!这样他又写了比较长的时间,在比赛结束20多分钟时,又一次1Y了这道题目,A了之后我们又测试不加优化的代码,也过了,说明了数据的极限数据不够强。这样正式赛以7个1Y结束了!获得了银牌!

  总结:

  这次能获得银牌,有很多方面的因素:

  先说说外部因素:我们这次精神状态确实很不错,来到赛场都是精神饱满!

  内部因素呢,ZS发挥超常,写的代码都是1Y,想到的思路也很对!我读到的题目,没有在像热身赛一样读错题目,也碰巧碰到了之前了解过的乘法逆元,WJH对题目的把握也很到位,思维也比较灵活,A题很快的1Y掉!

当然也还有很多教训:

  紫书上的题目,还需要在细细体会,必要的时候在做一遍,学习紫书要慢慢来!

  我们以后训练的也要多加练习,争取都要接触都要学习,多方面学习!路还很长,需要慢慢的走!

 

 

2016亚洲区域赛(大连站) 总结[需要更加努力~]_二维树状数组