二十号了,复赛在即,还望努力.
第一题:脑筋急转弯一样的神奇水题.有一个a×b的矩形桌子,和若干个半径为r的圆盘,两人轮流把圆盘放到桌子上,不能有重叠的部分.最后无法放圆盘的人就是输家.最后输出赢家.
一开始思来想去,完全没有思路.最后看题解才发现是一道大水题.放盘子的时候,只有两种情况. 1.盘子可以放下,那么只要第一个人放在了矩形正中央,接下来,不管第二个人放在哪,总能找到一个与之对称的位置来放置圆盘.2.盘子不能放下,当前的第一个人也就输了.
所以只需要判断第一个盘子能否放下即可得到答案.
第二题:暴力.利用搜索可以解决.不过在一些小细节上要多加注意.在此略作总结.1.在判断的时候,先判断下标是否合法,在判断内容.很多时候RE是因为在检查下标之前检查值导致的引用了非法地址.2.边界的设置,边界条件是什么,什么时候返回值,对于合法与非法的判断标准.这些都应该在读题审题的时候一起处理和了解清楚,不然很容易爆栈.3.拓展的顺序,有时候搜索的顺序可以大幅度的提高搜索效率(特别是DFS,也可以把它想成是一种非常特别的评估函数)
第三题:经典的搜索题.从每个点出发,寻找所有能到达的地方,加以标记.在判断是否所有的奶牛所在的牧场都可以到达.需要注意的是,因为是从点出发找奶牛,所以加边的时候要倒着建边(即起点和终点相反)
第四题:给出N×N网格,要求从 (1, 1) 走到 (n, n) , 要使得你所走路径的最大海拔差最小.
因为是求最大值的最小值,说以应当是一个典型的二分题.不过,当时眼拙,没看出来(应该说是看出来了没想哪方面想).先没读清楚题,以为只能向右,向下.果断写了DP;后来重新读题,开始写暴力搜索,直接WA掉.最后不得已向人求教,原为二分.
二分枚举(logN)可能的差值,对差值进行检验.检验的时候,如果单纯的直接寻找路径判断,一定会超时.可以利用一个巧妙的方法,枚举起点,加上差值,得到一个可能的区间范围.然后在图中寻找满足的区间的点,看能否到达终点.
第五题:01背包问题,有一点小小的改变,最终的结果中不能出现负值.其他的照旧.
第六题:还没读题......