ZOJ Monthly, August 2010 比赛总结|解题报告

       本次比赛由我、DTen和sssplk完成,一台机子进行。

      这几天因为学校的一些事情回去了一趟,堕落了两天。一回学校发现离网赛只有1周了,必须再做两场比赛训练下。这几天有和其他学校的acmer交流,发现他们都很强,压力真心大啊。

      言归正传,说下这场比赛。这场比赛做的效果总体来说不错,ac5道题,排名53/550.这场比赛虽然是我从头敲到尾敲5道题,但是队友还是帮了很多,比如F题也就是Attack the NEET Princess,我一拿到题目就有想法,然后说给DTen听,他比较适合这题,虽然最后还是我在敲,但是这个决策是对的,而且这道题没DTen中间提供的思路根本没办法ac。最后一道C题在离比赛17s的时候改了一个小错误提交返回AC,绝杀,也很漂亮。

     然后就想说下敲题速度,一直在刷CF锻炼敲题速度,敲代码的速度是上去了,但思考问题的缜密程度仍有待提高,总是在敲完代码后七改八改,严重影响速度。关于这点,只能说继续CF以提高之。


     到现在我们共A了6道题,因为开学晚上没怎么吸收题目,后面来补吧。现在说下这场比赛的题目(前面数字是题目在Zoj上的题号):

     Zoj 3373 Gensokyo Forbidden Words   看着像模拟题,其实就是模拟题,没想没写没ac。

     Zoj 3374 ⑨ Adjacent Numbers   带环的DP,剪开环再进行转移。

     Zoj 3375 Imperishable Night  状态压缩DP+贪心,好题!题目规定有三个变量,point,Iv,tv,让我们一个一个地选择n个地方种的某个地方,然后这个地方里面有两种宝物x,y可取,x宝物有xi个,可以让tv增加ai,y宝物有yi个,可以让lv增加bi。选择x,则point += lv,tv += ai,为了防止混乱带来思维复杂度地增加,我用xv代替lv,yv代替tv,这样就好看多了。那么选择x则point += xv,yv += ai,选择y,则point += yv,xv += bi,最后问获得的最大point。

     这题初看上去很复杂,但其实想好几点就很简单了。1、,本次选择某个城市,xv必定增加xi*bi,yv必定增加yi*ai,由于后面选择每个地方都要执行point += yv或者point += xv,那么这增加的xv和yv对后面的选择都会有影响,我们可以在前面就考虑对后面选择的影响。 2、选择城市是一步,选择好城市后里面的宝物如何选择才能让本次的point增加最大呢?这个贪心就好,我yy了一个结论,cnt = xi * yi,maxPoint = max(cntx * ai + cnty * bi)(cntx + cnty == cnt) .这个maxPoint是选择城市后增加的,对后面的不会有影响。可以认为选择城市和选择宝物是独立,那么我们可以预处理线算出每个点maxPoint。 3、选择城市可以用状态压缩来做,选择了某些特定的城市后,已经在后面的影响考虑在内,那么dp[i]就可以表示选择了城市编号压缩后为i的最大point。考虑好这三点之后就可以用类似于TSP的转移方法进行DP.

      详细报告见Here。

     Zoj 3376 Safest Points  不会。

     Zoj 3377 Ancient Duper  第一次鼓起勇气写博弈搜索,利用N点和P点的性质进行搜索。如果某个状态能走到一个P状态,那么当前状态就是N状态,如果都到不了,那么就是一个P状态。额,我有种错觉,是不是大部分博弈搜索都是这么写?请高人指点..


     Zoj 3378 Attack the NEET Princess 题目让我们找起点到终点必须经过的边。如果题目中的边数很小,那么显然可以先枚举边然后判断是否能从起点到终点。但这题边数位10万,换种想法,先用Tarjan求出所有桥边。然后进行一次Dfs,找出哪些边在起点到终点的路上。最后还有一点需要注意,本题有重边,这个可以再一开始的时候标记重边,然后随意增加一条边,注意才不影响连通性。最后既是桥边又是起点到终点路上的边且没有重边的边。

    Zoj 3379 Master Spark  几何题。

     Zoj 3380 Patchouli's Spell Cards 概率DP,选m个位置填充,每个填充的数的范围是1..n,问至少有l个数相同的概率。从反面来考虑,求不出现l个相同数的概率p,1-p既是答案。模型转换后就可以进行DP了,设dp[i][j]表示选到第i个数填充了j个位置的方案数,那么dp[i][j] = dp[i-1][j-k] + C[m-(j-k)][k](k < l && k <=j),,然后求出所有方案书total,ans = (total - dp[n][m]) / total,数很大要用大数。

     Zoj 3381 Osaisen Choudai!  线段树优化DP,我是敲完F发现暂时过不了再来敲这题的,果断增加了很多罚时。这题正着思考很复杂,应该逆着思考。由于第i天选择了之后,只有i + xi,i + yi - 1天能选,那么dp[i] = si + max(dp[j]) ( i + xi <= j <= i + yi - 1),求max的过程可以用线段树来优化,单点更新成段查询。

     Zoj 3382 Luna Dial 目测是神题。

     Zoj 3383 Shiro? Kuro?  简单模拟题,两个trick,一个是整除,另一个:输入的是mxn,并不是nxm.

     Zoj 3384 Yuyuko and Youmu 贪心,如果当前的ai小于bi,那么ansi = ai,否则就去前面ai-bi个,复杂度是O(n*n),官方题解是O(n),可以从后面往前贪心。

     Zoj 3385 Hanami Party  贪心,没想没写没AC。

     

     前面这些写得比较详细的,是我思考过的,我把它记录下来。Here是官方题解。


     本文ZeroClock原创,但可以转载,因为我们是兄弟。

你可能感兴趣的:(c,优化,BI,2010,Numbers)