ACM常用技巧...
文章平均质量分 68
404-unkown
这个作者很懒,什么都没留下…
展开
-
POJ2739--Sum of Consecutive Prime Numbers(尺取法)
题目大意:给出一个数字,求共有多少个序列,使得序列和等于这个数字,序列是由连续的素数组成 分析:尺取法。先打个素数表。然后,就直接可以尺取法啦~ 代码: #include #include #include #include #include using namespace std; int n, ans; int a[10002], vis[13000]; v原创 2015-08-16 15:37:31 · 299 阅读 · 0 评论 -
POJ2566--Bound Found(尺取法)
题目大意:给出一个序列,给出目标值k,求一个连续子序列,使得该子序列之和与k之差最小 分析:尺取法。首先,了解一下尺取法的题目有哪些特性。 一、连续性。所求序列是一个连续序列。 二、单调性。求解的序列满足某种单调性。 此题所求的序列明显满足第一个特性,但是,第二个特性并不能满足。 于是,我们可以联想到前缀和(暑假做题的过程中,慢慢发现前缀和是个原创 2015-08-16 13:10:35 · 392 阅读 · 0 评论 -
POJ1151--Atlantis(离散化+扫描线)
题目大意:给出n个矩形,求面积并 分析:线段树+离散化+扫描线。 先以Y轴(横线)建立线段树,当然,这里需要离散化。 然后,用一条直线从左到右扫描,碰到一条矩形竖边的时候,就计算该直线有多长被矩形覆盖,以及被覆盖部分是覆盖了几重。碰到矩形左边,要增加被覆盖的长度,碰到右边,要减少被覆盖的长度随着扫描线的右移动,覆盖面积不断增加。每碰到一条矩形的纵边,覆盖面积就增加( 此时扫描线被矩形原创 2015-08-18 11:06:32 · 301 阅读 · 0 评论 -
POJ1177--Picture(扫描线)
题目大意:给出n个矩形,求周长并 分析:线段树+扫描线。这里给出的是整数,而且范围不大,所以,不需要离散化。 和面积并差不多。不过,还是有点区别的。 numseg[i]数组记录有几条横边需要增加 lbd[i],ubd[i]表示当前区间的上下(也可以理解为左右,因为我是按Y轴建树的,所以自然就是上下啦~)两个端点是否被覆盖 cover[i]表示当前区间被几条边覆盖 len[i]表原创 2015-08-18 22:34:54 · 327 阅读 · 0 评论 -
哗啦啦族的01背包问题(折半枚举)
E - 哗啦啦族的01背包问题 Time Limit: 10000/5000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) Submit Status Problem Description 背包背包! 唐老师非常开心的在给小彭玉讲背包问题,“01背包就是在M件物品取出若干件放在空间为W的背包里原创 2015-09-06 09:29:18 · 606 阅读 · 0 评论 -
UVa1326--Jurassic Remains(折半搜索)
题目大意:给出n个字符串,选择尽量多的串,使得各字母出现次数为偶数。 分析:见白书分析。另外,写一下自己对折半搜索的想法。首先,我们需要确定搜什么,然后对该对象进行折半,接着就是取与不取的问题了。 代码: #include #include #include #include #include #include using namespace std; cons原创 2015-10-18 09:18:46 · 418 阅读 · 2 评论 -
UVa1382--Distant Galaxy(离散化+扫描线)
题目大意:在平面内给出n个点,找一个矩形使得各边包含尽量多的点。 分析:枚举上下边界,再确定左右边界。 代码: #include #include #include #include using namespace std; const int maxn = 111; struct Point { int x, y; bool operator<原创 2015-10-18 19:29:28 · 814 阅读 · 0 评论 -
Uva1398--Meteor(扫描线)
题目大意:今晚有流星划过,求在某瞬间最多有多少流星能被拍进镜头? 分析:咋看之下有点复杂。一点点分析后,可以发现这题是借助扫描线来解决,类似区间并,面积并。 每个流星可以看做一个开区间,这个问题可以转化为,求扫描线在哪个位置时与最多的开区间相交。 首先,我们需要将流星转化为开区间,如何转化呢?题目给的数据有坐标x,y,以及xy方向上的速度,那么我们很自然地想到分解成xy两个方向上来求原创 2015-10-02 20:34:04 · 382 阅读 · 0 评论 -
UVa10125--Sumsets(折半搜索)
题目大意:给出n个数字,求满足a+b+c=d最大的d 分析:先将等式变形为a+b=d-c,然后找出所有可能的a+b的值以及d-c的值,接着就直接匹配就行了。 代码: #include #include #include #include #include using namespace std; const int maxn = 1111; struct C {原创 2015-10-20 23:18:20 · 340 阅读 · 0 评论