首页 > 代码库 > 2014山东省“浪潮杯”第五届ACM省赛总结

2014山东省“浪潮杯”第五届ACM省赛总结

一次比赛做一次总结,弱菜又来总结了……

我这种大四的又死皮赖来混省赛了,貌似就我和山大威海的某哥们(不详其大名)了吧。颁奖前和他聊天,得知他去百度了,真是不错,ORZ之。

比赛流水账:

题目目前不知道哪有,过几天填坑。

没发题目前,我们赌A题可能是水题,由于我是主coder,我去读A,剩下的一个从前往后,一个从后往前。

结果……,看到A有一个貌似是几何的图……,我还是硬头皮读了。读到一半,3分钟刷榜,发现E有出,让ZK读E,ZK先告诉我了B题题意,转而读E。B题是一个有环形关系的期望,我扫了一下n==1000的数据量,排除了线性递推,记忆搜索,高斯消元的可能,也知道迭代的方法是可能水出来答案的。然后迅速敲了一个迭代,样例轻松就过了,后来发现(1000,500) 这组极限数据在迭代10^4次也据正确答案相差甚远,答案收敛的太慢了,心瞬间凉了一截。

差不多10分钟,ZK淡定的告诉我E是求10以内阶乘……,我放下B敲E,12分钟1Y。(发现ZK确实是一个很淡定的人)

宝宝告诉我G,一个求组合问题,并且告诉我他YY的一个做法,我敲之,不过样例,放之。

刷榜发现有出F,求完全二叉树两点之间距离,ZK说两点慢慢往上爬就行,我想了想细节敲,28分钟1Y。

刷榜发现有J,让队友去读题,我回来继续搞B。B题只能放弃迭代,正当我想根据三个结论(1.d[i]=0.5*d[i+1]+0.5*d[i-1] , 2.d[n]=d[0]=0 , 3.d[i]=d[n-i])推公式的时候,我根据小数据发现了规律……,我发现d[0]=0,d[1]=n-1,d[2]=(n-1)+(n-3),d[3]=(n-1)+(n-3)+(n-5)……。这样轻松过了样例,看了一眼(1000,500)这个数据,发现跟我用迭代1000次后求的结果差距比较合理……,44分钟1Y。B题42分钟爆发的一血,其实在交之前我又对拍了很多数据,发现都没错误后才交的;我认为我的谨慎并没有错,一个顺畅的开局是对后场十分有利的,一血不一血无所谓。

1 memset(d,0,sizeof(d));
2 for(int t=0;t<1000;++t)//迭代次数
3     for(int i=1;i<n;++i)
4         d[i]=0.5*d[i+1]+0.5*d[i-1]+1.0;
淫荡的迭代法

至于答案为何这样,过几天演算演算再过来填坑吧……,而且这道题貌似扩展一下会比较有趣……,再议吧……

刷榜发现A,G,J。其中A,J居多,宝宝告诉我A题意,ZK告诉我J题意,发现A是求面积,简单的推公式代码量不大,于是全权交给队友负责。我去搞J,J题很有意思 10^7的数据,求某种满足题意的数,2s的测试时间,发现貌似只有排序这条路比较好走,元素权值在10^9,基数排序不好使只有快排了。于是快排搞起吧,结果我把两个不等式看成了一个…… 就是把S/2 and segma(w)看成了一项……,结果不仅导致没出样例,还中途死机两次(估计访问内存出错)……,我真是罪过罪过。由于我跟ZK没有沟通好,他不知道我题意理解有偏差,我也不知道哪里会出错,于是打印代码暂时放下J。去趟厕所挽回一些RP。

宝宝来试他A推公式的结果,答案出负数。我:要对得起高数老师啊……,宝宝打印代码下机去改公式。

发现G n,m是100,100的数据量,可以先用一个2维dp搞,dp[i][j]代表i个队占j个桌子的方案数,于是dp[i][j]=dp[i-1][j-1]+j*dp[i-1][j],注意一下边界。最后由于桌子也是不同的,所以dp[n][m]*m!就是答案。100分钟1Y。

刷榜发现还是那几个题,偶尔冒出个C,ZK告诉我C题意:3种蛋糕求环相邻不选相同蛋糕的方案数,我手头还有J就没去想C。在确信J代码无误的情况下,跟ZK讨论半天才知道我题意理解出错。宝宝再想试试A,我就让他上了。(其实我应该趁热打铁先出了J的)。我下机抽空看了I(完全忘了还有C),按照我的理解发现是个比较有趣的题(后来发现题意完全理解跑偏)。宝宝再次得出负数,我:要对的起高数老师啊!!! 于是下机再改,ZK帮宝宝改A。

我继续搞J,发现就是题意理解问题,过了样例交之,160分钟1Y。这题这么晚才过,责任在我。另外,这题告诉我们暴力出奇迹……

ZK和宝宝合力搞A,终于过样例,交之,165分钟1Y。终于对得起高数老师了。lyt赛后电话说5分钟上俩题怒进金牌区。其实没什么,这是双开的正常现象。

赛场开始发午饭了,竟然真的是馅饼!这个味闻得我胃部开始翻滚……

刷榜发现山大八题了,多了C和D。C题ZK告诉我他以前做的一个类似题,我灵光一闪,所有数据不超过50蛋糕只有3种,4维dp可以搞,枚举A,B吃了多少个,再枚举这个人吃什么,按照人数从1推到n就可以了,由于人是成环形,还要注意第n个和第1个人不吃相同的。所以根据第1个人吃什么,做3遍上述的dp,统计答案就行。

敲到一半得知D题意,发现是简单成段更新线段树。我权衡了C,D。我觉得C题代码写起来不是很清晰,于是先开D。宝宝想替我搞D,让我理C题代码思路。我突然发现他的思路还不够成熟,还是把他拉下来换我搞D,做法是用两个延迟标记,一个记录增量,一个清零,这样比较直观。快敲完时,听到山大某神队振臂高呼,恭喜AK……,此时还在封榜前。敲完D,过样例,感觉没错,交之,WA。连续交Y的记录被终止……。突然有一丝紧张,然后紧张转瞬即逝……,我也不知道为什么。

封榜,6题银牌区第一,差上一名一分钟罚时……。

打印D,因为ZK和宝宝知道我思路,所以他俩帮我CHA D题。我转而搞C。我发现我的状态开始下滑,毕竟4个小时一直敲代码有点受不了。挣扎着把C搞完过了样例,觉得没错交之,WA。突然发现答案要取余……,我觉得代码没么错,所以取余加上再交,249分钟2Y。

差不多这个时候,又闻山大某神队振臂高呼,恭喜AK……。三人分析目前形式,D题一定要过,而且要注意罚时尽量不要再WA了。D题数据太水,宝宝出了一个卡程序的数据,于是DEBUG代码。终于我发现了pushdown有细节写错,改之,发现又漏了个地方,改之,过数据。又出了几个数据,也过。交之,284分钟2Y……

还有十五分钟,看了看I,搞清I真正题意,发现貌似不是很难,想了五分钟思路,无果。最后十分钟,我们做出了最后一个决定:吃饭……。

I题,其实关键的一句话是l,r>=0,所以不需要考虑负权边,所以到根距离是偏序的……,所以把距离排序……,然后把点按次找到能插入的位置(二分找)插入求组合就行……,有一个细节是距离相同的元素插入顺序可以交换,所以对于相同的应该再乘阶乘吧……。过几天有提交地址了验证这样下是否正确……。H题没看,过几天再填坑……。

 

总结:

1.终于水到一块金牌,但是去年的遗憾无法弥补。这次能出八题,一是赛前策略得以实施,刷榜跟神队之风……,读题交流题意等等,尤其是双开到后面的一道一道啃,都较好实行了;二是靠队友之间的配合,从题意交流到code再到debug,都还不错。感谢宝宝和ZK对我的信任……,让我敲了7道题,幸好我都出了;三是于赛前的两周高强度训练赛并且总结,锻炼了队伍的配合,出题能力,保持状态等,这确实是一个参赛前不可少的训练环节,费老师用心良苦啊……;四是上厕所带来了人品……。我们能力确实有限,战斗力还是不足,八题算是多的了,虽然I题可做,我认为不属于能在规定时间内做出的范围内,所以九题无望。

2.这场也有做的不好的地方,J题出这么晚,说明队友之间交流还是出现了问题。另外,思路没整理好不要轻易上机,D题还好被我嗅探到了队友考虑不周的地方……。

3.封榜前AK,跟山大的差距不言而喻……,另外可以看到海大江哥没有AK心里也是不太爽的……。所以明年SD ACMER都再加油吧。我是没有明年了……。

4.赛后我再看这套题,心里是挺别扭的。个人感觉题目出的面比较窄,组合类计数问题出了好几个。A算是个计算几何么……;仅仅在C题样例输入里见到了字符串的影子,其实给一串ABC还不如直接给出个数来的爽快;图论现在都不喜欢出了么……;大模拟消失了(也许挺好);貌似有那么几道题,总感觉见过的样子。如果这套题放在JZ,应该会被纷纷AK,九道,八道……,然后因为罚时,互相都会挺不服气。但是放在SD……,还是一套有区分度的题。这里面的意味大家应该都懂吧……。能说什么呢,确实SD好几年区域赛没什么好成绩了,所以SD加油吧……。

5.这次,我就是来做题的,玩的很高兴,终于过了一把A题瘾。