随笔分类 - UvaOJ
Problems from UvaOJ and mostly recommended by Rujia Liliu;
Thanks a lot for Rujia Liu
摘要:Thinking about it: 题目要求最后一名(也就是第N位)的分数要尽量的大,那么就一定要求第N-1名的分数也要尽量大。假如N-1可以取400和500,那么N-1应该取500,如果取400,可能第N位就不能取450,而只能取350了,这样不满足要求。综上,可以从第1位开始,分数尽量取高一...
阅读全文
摘要:Thinking about it: 对于一个长度为N的序列,最大的数字为N,那么如果要将它放回到第N个位置,那么最多需要2步。 先用例子简单证明一下: 假设序列:1 2 3 6 5 4,当前最大数为6,需要和4交换位置,那么可以看作:* * * 6 * 4,因为6和4之间有一个数,而6之...
阅读全文
摘要:Thinking about it: 我的思路跟sliding window有点类似。假设已经确定了一个区间[l, r],序列中从 l 到 r 恰好包含了[1, K]的各个元素,则从 r 开始继续迭代序列的各个位置,如果发现了1到K的数,则做以下处理: 如果 这个数 刚好是 l 位置上的数,那么...
阅读全文
摘要:Thinking about it: 刚开始思考的时候,脑子里就觉得这道题可能有很多情况,刚开始就因为考虑不周全wa了。 后来换了一种思路,如果不能马上就直接得到答案,就一个一个字母去尝试。这样子就有点类似dfs了,比如 名字排序后排在中间的z字符串是 s1,,s2,那么第i位的字母肯定介于 s...
阅读全文
摘要:Thinking about it: 要求是从1~n的一个序列,通过题目给的两种方式,变为要求的序列。 如果如果反过来,是将目标序列排序变成生序序列的话,那么可以发现这种排序方式很像冒泡排序。例如 4 2 1 3 的基本思路就是 先将 3 放到 4 前面 得到 3 4 2 1 ,再将2放到3前面...
阅读全文
摘要:Thinking about it: 题目要求是删除D个数,因为总共有N个数,因此也可以看作在N个数中选择d = N - D个数。 怎么选呢?选择第一个数时,肯定是在[ 0, N - D ] 的位置上选,既然选,肯定在这区间内选最大的。如果最大值有多个,那么选位置靠前的,因为这样可以选第一个数的...
阅读全文
摘要:Thinking about it: 看完这题的时候,确实没有啥思路,看了题解才明白的。这个最小值是通过二分法先确定下来的,然后才能分组。这种思维方式超出了我的意料,我还一直朝着DP的思路走。看来我还需要多磨练。Reference: 《算法竞赛入门经典(第2版)》Code: /** * AC ...
阅读全文
摘要:Thinking about it: 题目意思有点类似于八皇后,但没有了斜方向上的限制,而多了一个摆放区域的限制。因为题目中的N最大达5000,不敢贸然采用回溯法。可以得知,题中每个Rook的摆放区域是一个矩形,而且每个在摆放时,x,y轴其实是相互独立的,如何摆放x轴的位置并不影响y轴。因此可以先...
阅读全文
摘要:Thinking about it: 看到这题时,我马上想到了hdu 的 1496,这两题有异曲同工之处。我个人对hdu1496的题解:Click Here 将所有第一第二个数的和a + b都保存起来,记录每个数出现的次数,然后计算每一个c + d,对于每一个c + d,查询-(c + d)出现...
阅读全文
摘要:基本思路就是Bfs: 本题的一个关键就是如何判段状态重复。 1.如果将状态用一个int型数组表示,即假设为int state[17],state[0]代表机器人的位置,从1到M从小到大表示障碍物的位置。那么如果直接用STL中的set是会超时的,但如果自己建立一个hash方法,像这样: int...
阅读全文
摘要:基本思路是Dfs: 1. 一个一个格子摆放,以每个各自的左上角的点为基准点代表格子,比如(0,0)代表(0,0)(0,1)(1,0)(1,1)组成的格子,(0,1)代表(0,1)(0,2)(1,1),(1,2)组成的格子,以此类推,即可一个一个格子按顺序摆放。 2. 当摆放(x,y)时,比较分别...
阅读全文
摘要:大致思路是DFS: 1. 每个图案所包含的白色连通块数量不一: Ankh : 1 ; Wedjat : 3 ; Djed : 5 ; Scarab : 4 ; Was : 0 ; Akeht : 2 根据每个图包含的白色连通块判断是哪个图案 2. 两个Dfs函数,一个判断白色,一...
阅读全文
摘要:基本思路是BFS: 1. 题目中已经说了,每相连的2X2格子中必有一个‘#’,也就是,每个点周围最多也就三个方向可以走。因此,可以把所有空格都提出来,形成一个图,直接遍历每条边,而不是每次判断4个方向是否可以走 2.关于结点判重,最初的想法是想用一个六维数组,后来参考了其它,发现其实可以用一个三...
阅读全文
摘要:这道题如果直接用Dfs,运气好的话是可以直接过的。 但如果要在Dfs的基础上加快速度,剪枝是必不可少的。 我的剪枝策略: 1.当前点(x,y)回到出发点至少需要 |x| +| y| 步,如果剩余的步数不足以达到当前所需的最小步数,则剪枝。比如在没有障碍的情况下,要求在4次行走时完成回路...
阅读全文
摘要:大致思路:其实用dfs就可以解决,但是只用dfs的话,会导致超时。在进行dfs前,应该判断一下从1点能否到达目的地,这样就不会超时了,估计是测试数据中有很多是从1点无法到达目的地的。 判断能否到达可以用bfs判断,在这道题里,效率还算不错。C++代码:#include #include #in...
阅读全文
摘要:基本思路是递归枚举,对每一个位置每一次从'A'开始到'A'+L-1枚举,如果在这个位置的选择这个字母能使字符串成为‘Hard’,则计数,一直计数到N就立即输出答案。判断是否是‘Hard’的方法,从末尾开始枚举长度为1的字符串一直到长度floor(Length/2)的字符串和前一个相同长度的字符串比较...
阅读全文
摘要:基本思路是暴力枚举,思考一下可以发现,可以跳过一下情况。对于目前最小的minBW,每次枚举一种排列计算bandwidth进行比较,如果大于当前minBW已经可以断定这个排列已经不可能是最好的解了。 而且对于一个点来说,与它相连的点为N,那么就这个点而言,最好情况就是这些点分布在其两侧,band...
阅读全文
摘要:题意:给出式子abcde / fghij = N, 其中a, b, c, d,e, f, g, h, i, j代表0~9中的任意数字,不能重复,因此构成两个五位数(可以有前导0),要求这两个数整除为N。题目给出N,求所有满足要求的式子,并且要按除数(被除数也是一样)从大到小输出。一个N对应输出一组答...
阅读全文
摘要:题意:52张牌,初始每张牌各成一堆,且从左到右成一排摆放。每堆的最上面一张可以移动到左边第一堆最上面或左边第三堆,如果匹配的话。匹配的条件:花色相同或牌面值相同。而且只有牌堆中最上面的牌可以参与匹配,如果一个牌堆空了,则空牌堆右边的牌堆向左移动一个牌堆。如果一张牌同时可以移动三格或一个,则优先移动三...
阅读全文
摘要:题意:一个天平表达式:[A,B],其中A和B为一个数值或又一个天平表达式。每个天平表达式代表的天平所有长度相等,故如果需要平衡,则要求两边质量相等。题目则是给出了一个天平表达式,要求计算,在给出表达式的情况下,如果要求平横,则最少需要调整几个物体。思路:假设有N个物体(砝码)在天平上,那么最多需要修...
阅读全文

浙公网安备 33010602011771号