摘要: http://poj.org/problem?id=2886恩,分糖果,快乐的童年啊!题目意思大概n个小孩围成一个圈,每个小孩手里有张卡片,记录着一个数字。开始从第k个孩子,该孩子离开圈子,然后告诉别人他手里的数字,接下来便从位于该孩子的位置加上孩子手中的数字的孩子开始,直到所有的孩子都离开了圈子,游戏便结束。每个跳出圈子的孩子都能得到一定的糖果,数目是他跳出圈子的顺序数的因子数之和。 例如第6个跳出的孩子能得到(1,2,3,6)四个糖果。这个游戏,其实和猴子选大王是一样的!只要注意好求解相对位置即可,所谓相对位置,例如:a,b,c,d四个人,a对应1,b对应2,c对应3,d对应4.但是当b不 阅读全文
posted @ 2011-11-14 21:12 Accept 阅读(496) 评论(0) 推荐(1) 编辑
摘要: http://poj.org/problem?id=3145Harmony Forever。。。多吹牛B啊。这题巧妙的运用了鸽笼原理,什么是鸽笼原理?鸽笼原理就是给你N+1个数,则必定至少有两个数的余数是相同的!解决这题的时候,我们先用RMQ的方法求出每一段的最小值,这是容易做到的。这题的数据范围是500000,也就是说最多会有500000个叶子节点,当该叶子节点的值为inf的时候,表示这里没有值。当它的值等于它的位置的时候,表示它有值,例如:集合[3,4,5]在线段树中叶子节点中的表示为 [inf,inf,inf,3,4,5],前面三个inf分别表示0位,1位和2位询问的时候,假设我们要求的 阅读全文
posted @ 2011-11-14 20:06 Accept 阅读(376) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=2828灰常有趣的一道逆序思维题目,并且题目掐的很死,用链表什么的,统统tle如何逆序思维?假设数据如下:40 771 511 332 69我们从后向前解题,开始是第四个人,他的pos==2,可是他前面分明还有3个人,也就是说,他必须插一个人的队才有可能达到他要达到的位置再看第三个人,他的pos==1,他前面还有两人,他也需要插一个队再看第二个人,他的pos==1,前面也只有一个人,1-1==0,他不需要插队第一个人,0-0==0,也不需要插队了最终队序是:77 33 69 51我们用线段树加快插队速度,如何做?很简单,定义一个left表示该 阅读全文
posted @ 2011-11-14 11:14 Accept 阅读(214) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=2482A了这题后,我就在想,是不是ACMER都找不到女朋友.....这题看似很新颖,其实就是求线段树区间最值。所谓区间最值,其实就是和RMQ差不多,只不过RMQ是以点为单位,而这个是以区间为单位。怎么扯到区间最值了呢?因为每一颗星星,它都有一个亮度,假设这个星星现在正在最左边,那么它的亮度将会影响到向右W的范围。也就是说[star.x,star.x+W]这个区间都会因为这个亮度的影响而加上这个亮度值,最后求一个[x,x+W]的区间,并且该区间的亮度最大,这就是区间最值!方法和RMQ一样,只是不是更新到节点,而是更新到相应线段即可!这里还要注 阅读全文
posted @ 2011-11-14 10:50 Accept 阅读(259) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=3225这题很有意思,对于[0,65535]这么一个区间,初始值为0,问最后为连续1的子区间有哪些。很有趣的是,这题涉及到了开区间和闭区间,即() 和 [] 。确是比较棘手!解决的办法是将所给的数据范围乘以2,然后根据给的是开区间或则是闭区间修改数据,例如:给你(2,3]这样的数据,如何处理呢?我们将范围乘以2,得到(4,6],然后,如果左边是开区间,则将4加1,得到5,同理,如果右边是开区间,则将6减去一个1。为什么这样做呢? 看看,因为数据乘以2后,得到的结果一定是偶数,而偶数加一减一后,肯定得到奇数。也就是说,如果最后得到的数据是偶数, 阅读全文
posted @ 2011-11-14 10:17 Accept 阅读(247) 评论(0) 推荐(0) 编辑