第6届山东省ACM省赛总结
被无情的打星了。
题目终于挂出来了,应小盆友们的要求给他们写一份题解,可是在这之前我还是先写一篇流水账吧。
今年我们有5个正式队5个打星队名额,老师说为了多给小盆友们点机会,于是让我们打星去比赛了。
比赛还没开始,我和耗子同时看上了F题的气球,骚红骚红的。
耗子开玩笑说要不我们先拿这个球吧,我说那万一是防AK的那可就jj了。
提前两分钟发题,我们还沉浸在骚红色气球中,其他好多人都开始看题了(这也太不正式了吧)。
我说咱别干这么败人品的事,把题目拆开放着,他俩让我先去敲vimrc。
我还没敲完,耗子就跟我说A题签到,这么搞这么搞然后再输出什么什么,就好了。说完,我敲上,交了,11min - 1Y。我至今不知道A题是干嘛。
这时看榜,C和F都有出的了,他俩已经去看C了,我自己去看F(骚红气球近在眼前)。
F题三分可搞,但要推一堆式子有点麻烦。给耗子说完题意,耗子说他印象中那是个什么定理,老师讲过,代个式子就行了,所以才有人做的那么快。但他忘了。我表示完全不知道。
F我决定先放一放,问旺旺C是什么意思。一个博弈,我自己在那画了几画,跟他说我怎么感觉都是先手必胜。“噢,那是个环,我刚刚没说清楚”。好险。然后耗子说小于等于2先手必胜,否则后手必胜。没错,如果链的时候前面的结论成立,那变成环的话后面这个结论也就成立了。我把C敲上,27min - 1Y。
我刷榜看到J题交了一片全是红的,决定先不管它,回去敲我的F。让旺旺帮我推两个式子,我先把框架打好。(我几何太不6了)
过了一会儿屏幕蹦出个框说J题数据范围描述有错。。。10^1000居然写成了101000。。。没多久又来广播通知J题需要改动。我再一刷榜发现已经绿了好几个了。这题可以开始做了。
F还没敲完,耗子又来跟我说J题用java可以秒掉,我打开eclipse建好文件,他说怎么怎么怎么地,然后我敲上就A了。55min - 1Y。事后他们跟我说J题背景。。。唉,听着桑心。不过没掉这题的坑里倒挺开心。而且我们学校没有队伍被这题坑掉,于是我们就很没心没肺的忽略他题目出错的问题了。
我继续回去写F。过一会儿抬头一看发现对面比我们多了个气球,那是B题的,我看看榜,发现B题过的还挺多,我们学校一个小盆友队也过了,我问他俩有没有看了B题的,旺旺说他看了,是什么什么什么。。我一想那好水啊,一个数组加一个set就搞定了。我又放下F去写B,在这之前我告诉耗子帮我把剩下那几个表达式都列出来。 B题写完交上,79min - 1Y。
心想四道签到了,剩下的就没那么水了。一开始还以为F是签到,需要三分是不是我们想多了,结果到这时还是只有那一个队7min1Y的。
我老老实实回去接着写F。写完,不过样例,重推公式。终于过样例,交上,WA。终于还是打破了1Y的局面。感觉这题不会有什么trick,过了样例应该已经可以了,仔细看一下代码也没什么地方出错。这时耗子想到会不会有精度问题。当时为了方便我们就用(0,0),(1,0),(1,1)作为那个三角形,因为任意三角形都是一样的。可是这个三角形可能在计算的时候产生较大的误差,于是我把坐标放大一万倍,交上,真的A了。。 112min - 2Y。
跟榜走,这时H过的比较多。H是给n个数问任选两个能组成平方数的有多少种。G题也差不多,只是组成立方数。n是十万数据大小是一百万,当时想到一个暴力加一些剪枝的方法,觉得如果它卡的不严的话应该能过,毕竟还有个G,G题暴力肯定不行。跟耗子说一说题意,他也觉得可行。说完我就去敲了,他俩接着想。没多久,耗子过来跟我说他想到一个方法肯定没问题,同样的方法稍加修改也肯定能过G。我说我已经写完了,准备跑样例。他说那你先交一发,也许行,T了的话用我这个肯定行。跑过样例,交上,果然TLE。他想到的大概就是先把每个数分解,将平方数的因子去掉,最后看剩下的每个数几个,就是C几2了。就这么敲上,果断AC,156min - 2Y。
“改成G有一个地方比较麻烦,但也没麻烦多少”。耗神渐渐飞起了。
就是将每个数的立方数因子去掉,最后看每个数跟另外那个能和他刚好组成立方数的数有多少个,比平方数麻烦的地方是一个数和他自己就能组成一个平方数,立方数不是。但整体框架不变,都得分解。
这时旺旺来说他看完L题了,感觉先来个强连通缩点再bfs求个最短路就行了。耗子表示图论不会,交给我俩。
我说旺旺先理一下代码框架,我改完G就回来搞L。
然后就去写G了。改到一半我发现思路有点混乱,决定让出电脑给旺旺打L,先在纸上理一理。理清楚后,我问旺旺L怎样了,他说模板打了一半,我说那先让我们改完,五分钟就好。然后我又回去打完,过样例,交上,马上让出电脑给旺旺。过一会儿,返回结果,RE。我打印了一份。没多久,找到错,跟当前数能形成立方数的那个数很大,导致数组越界。加一行交上,返回了WA。
旺旺这边的L交上也WA了,叫我帮忙看看,让我重新看一遍题目确保没看错题,因为题目挺长的。
我让耗子接着看代码,感觉AC就在眼前。我先帮旺旺看一下L的题目。
耗子找到错,在子函数里有个地方我直接return了,导致没有执行到最后的某个赋值操作,从H改过来没改全而导致错误。。改完,再交,还是WA。
我接着看L。
旺旺说L找到了个错,再交,又WA。
权衡了一下,G题思路很成熟,L题题目我还没看完。我说要不我先给G打个暴力对拍,肯定就能找到错。
我正要开始写,耗子说先给我几组数据。一跑,果然错的。这时他发现是算重复了。每个数都被算了两遍,忘标记了。加上标记,再跑,发现自己的数据过了,题目的样例没过。(一直以为是自己输错了样例,现在题目放出来后才发现原来当时是用了H的样例,它们就最后一个数不同。H的样例在这题的答案应该是1,而这题的样例答案是2,于是我们用着H的样例在这题在算重复的情况下得到了和这题一样的结果,我们都认为是对的!)(这句话真拗口)就这么交上,A了。
我回去接着看L。耗子表示图论不会,去找别的题看,看到了D题。
过一会儿耗子来跟我说D题好像很水啊,贪心一下就行,怎么怎么怎么的,说着说着我都信了,按这个想法写上,30行,WA。
我还是觉得看L更靠谱,感觉没什么坑,缩完点再求最短路可行,正在想一些数据。这时旺旺又交一发,默默的得到了个yes。真6。 271min - 3Y。
我出去上个厕所,突然想清楚了D题的情形(那里真是个神奇的地方),之前想得太简单了。赶紧回来跟他们说清楚之前错在哪,然后现想。当时想的是枚举x的下界后通过贪心的方式确定上届,然后再怎么确定y,后来想想发现又进了前面的错误里。然后又想直接枚举x的上下界,这之后又不懂怎么去求y了。时间还有几分钟,想不动了,也敲不完了。
我们开始吐槽。我回头一想发现这场都没有dp,至少没有稍简单的dp。后来问了其他题的题意发现好像只有K可以跟dp扯上边。有一道算啥概率的但也不是概率dp。错题J就不吐槽了,G和H几乎一样的题,一样的类型几乎一样的做法,也是醉了。那么多道数学题,耗神强行飞起。旺旺默默地单挑了L题。我只有特别不6的没有特别6的。。。
版权声明:本文为博主原创文章,未经博主允许不得转载。