自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

林伏案的博客

伏案的学习笔记

  • 博客(29)
  • 收藏
  • 关注

原创 hdu3974(多叉树时间戳建模成线段树)

/*translation: 一个公司里面每个员工都有一个顶头上司,一旦给某个员工分配任务后,这个员工以及该员工的所有下属都在做该任务。 有若干操作,分配给员工任务以及查询该员工正在执行的任务。solution: 线段树,时间戳一般化 很明显该公司的所有员工间的关系可以用一颗多叉树来表示。然后就是dfs给这棵树打上时间戳。根据新分配的id号码 将其节点对应映射到线段树上面。这样分配任

2016-11-28 20:09:30 1224 1

原创 hdu4553(神TM烦的线段树维护连续区间ORZ)

/*translation: 中文题意,不表solution: 线段树维护连续区间 此题还是按照基本的线段树维护连续区间的方式来,但是有一点较为复杂,就是要同时维护 DS和NS两个线段树。所以要清楚二者之间的关系,NS能够影响到DS的树,而DS不能影响到 NS的区间。注意合并区间过程中极易出错。note: #: 之前WA了几次都是因为m=(s[o]+e[o])>>1和m=(l+r

2016-11-27 00:04:42 765

原创 hdu1540(线段树维护连续区间模型)

/*translation: 打地道战,n个村庄用地道连成一条直线,鬼子有时破坏掉一个村庄,这时八路军要修好这个据点。现在要求询问任意一个村庄, 得出这个村庄现在与几个村庄相连,包括它本身。solution: 线段树维护连续子区间 将村庄抽象成一个点,正常下值为1,被破坏后变成0,即可将题目抽象成一个求目标节点所在的最长连续1序列的区间的长度。 所以在线段树里面维护3个信息,前缀最长

2016-11-19 19:57:50 3429 1

原创 hdu4027(线段树)

/*translation: 给出一列数列,有两种操作,一种是将数列的连续一部分的值变为原来的平方根。 另外一种是查询连续一段的和。solution: 线段树即可note: #: 一开始纠结怎么更新节点上的和,因为是将每一个值都变为原来的平方根,所以不可能在常数时间内更新完连续的 一段和。想了好久没有头绪,看了题解才知道关键是发现一个很重要的隐藏条件:只要一段连续区间的和等于r-

2016-11-19 15:03:49 400

原创 hdu1698(线段树区间操作,绝对懒惰标记)

/*translation: 有一段数列,初始值为1,后来有若干操作,把连续一段的数字改成1,2,3中的某一个。问经过若干操作后 这段数列的和是多少?solution: 线段树的区间操作。note: 注意这道题和poj3468的不同是poj3468的操作顺序对结果没有影响,而这道题是有影响的。 所以懒惰标记无论在更新还是查询的时候都要往下面带。date: 2016.11.18

2016-11-18 21:33:34 400

原创 poj2528(线段树,离散化)

/*translation: 有一堵墙,往上面贴海报,每张海报有各自的范围,可以相互覆盖,求最后还能看见多少张海报?solution: 线段树,离散化 每张海报的粘贴就是一个区间操作,所以可以考虑用线段树来解决。但是题目中所给的墙的长度数据量太大,都存下来 肯定MLE,所以考虑利用离散化,将每张海报的端点存储下来。然后利用这些端点来建立一颗线段树。然后就是查询操作 了,为了不让先后顺

2016-11-18 20:35:46 3475 2

原创 poj3468(线段数区间操作模板)

/*translation: 给出一列数组,有两种操作,将某一区间所有的数字都加上c,查询某一区间的和。solution: 线段树区间操作模板note:date: 2016.11.18*/#include #include using namespace std;const int maxn = 100000 + 5;const int INF = 1e9 + 10;

2016-11-18 09:57:46 718

原创 poj3368(RMQ,ST算法)

/*translation: 给出一列数列,按照不递减的顺序。并且给出若干查询操作,查询某一区间出现频率最频繁的次数是多少?solution: RMQ的ST算法 首先设置数组dp[i][j]表示从i开始长度为2^i次方的查询结果。则根据动态规划有: dp[i][j] = max(dp[i][j-1], dp[i+(len >> 1)][j-1])。 然后根据数据不递减的特点,可以将其

2016-11-16 23:20:54 577

原创 hdu1166(线段树)

/*translation: 给出一个数列,并且有若干操作,对某一数据增加或者减少。查询一段区间的和,给出查询的结果solution: 线段树直接搞note:date: 2016.11.16*/#include #include #include using namespace std;const int maxn = 50000 + 5;struct Node{

2016-11-16 23:10:58 354

原创 poj2100(尺取模型,总结)

/*translation: 给出一个数,求一系列连续的数字使得它们的平方和等于这个数solution: 尺取法即可note: #: 这道题有以下几个坑。一是L和R要从1开始,二是判断循环结束时我用了while(R*R<=n&&L*L<=n) 正确姿势是只判断L,因为R有可能在最后一次循环中超出n。 *: 尺取法的总结: 尺取法本质上是将一个区间不断向前推进,以期获得解的过

2016-11-14 20:22:06 557

原创 poj2739(尺取模型)

/*translation: 给出一个数,求有多少种用连续的素数之和来表示该数的方法。solution: 尺取法。 预处理筛出数据范围内的所有素数,然后将其存进数组里面,在这个数组的基础上使用尺取即可。note:date: 2016.11.13*/#include #include #include using namespace std;const int maxn

2016-11-13 22:28:31 283

原创 poj2566(尺取模型)

/*translation: 给出一串数列,求其中最接近t的一个子串之和是多少?solution: 尺取法。 这道题不能直接对原数组采用尺取,因为原来的数组有正有负。而尺取法使用的条件就是在推进的过程中的单调性, 如果对原数组直接采取尺取,由于原数组正负数都有,导致在推进过程中尺取的和有增加也有减少。故不能采取尺取。 所以考虑对前缀进行排序后,再进行尺取即可。note:date:

2016-11-13 22:26:43 642

原创 poj3977(折半枚举,多坑)

/*translation: 给出一列数列,找出其中的非空连续子序列,使得其和的绝对值最小。如果有相同的和的情况下输出元素个数最少的那个solution: 折半枚举即可note: #: 思路很简单,分成两半,折半枚举即可,但是代码中有很多坑。首先必须对前后两部分只选一个的情况单独考虑。然后如果 ans_sum的预设值为INF的话还是会WA,所以最好设置为随便一个集合的和就行。da

2016-11-13 22:23:05 524

原创 poj2549(折半枚举)

/*translation: 给出一列数列,求满足等式a+b+c=d的最大d是多少?其中abcd都是数列中不同的数字。solution: 这类问题多半用折半枚举法就可以解决了note:date: 2016.11.11*/#include #include #include #include #include using namespace std;const int

2016-11-13 22:15:33 330

原创 poj2785(折半枚举)

/*translation: 从4个数列里面选择四个数,使其和为0.共有多少种方式?solution: 折半枚举即可note:date: 2016.11.10*/#include #include #include #include #include using namespace std;const int maxn = 4000 + 5;typedef lo

2016-11-13 22:12:17 330

原创 poj3684(相遇碰撞模型)

/*translation: 将N个半径为R的球放入一个圆桶(圆桶口径刚好放入一个球), 将圆桶竖直放着,最下端距离地面H高度,让球每隔一秒自由下落,求T时刻各个球距离地面的高度。solution: 所有的球都一样可以忽视它们的碰撞,视为互相穿过继续运动。这样就可以分别单独求出每个球T时刻的高度后排序就是答案了。note: 注意在开始处理的时候要将所有的球按照高度与地一个小球一样的高

2016-11-13 22:08:01 932

原创 poj1759(二分找寻最值)

/*translation: 有n个灯泡挂在距离地面分别是hi的高度上。对每个hi有如下几个条件的限制: H1 = A ; Hi = (H i-1 + H i+1)/2 - 1, for all 1 < i < N ; HN = B ; Hi >= 0, for all 1 <= i <= N 求最大的B值是多少solution: 二分枚举第二个灯泡的高度即可note: #:输

2016-11-13 22:00:59 276

原创 poj3185(开关问题一般解法,以及高斯消元解法)

/*translation: 有20只碗,现在要使得它们全部变成碗口朝上的状态。至少需要多少操作步骤。solution: 按照开关问题解,但是要从最左端和最右边分别开始求解,然后比较。note: #:按照poj3276的解法应该就可以解出来,但是为毛在这里还得对从左和从右求解的结果比较? 难道poj3276的解法本身就有问题?坑待填...date: 2016.11.8*/#

2016-11-13 21:39:51 690

原创 poj3279(二维开关问题)

/*translation: 给出一张二维的图表,1表示该处的电灯打开,0表示该处的电灯关闭。每次关闭一盏灯会使得其相邻的上下左右四个位置的灯状态反转。 给出使得灯全灭的最小次数的方案以及对应的每个位置上的操作次数。solution: 二维开关问题。 考虑到每次枚举左上角的灯泡,然后按照一维的开关问题求解。但是这样的话每次的状态选择就成了问题,因为上下左右四个位置都可 使得这个位置状

2016-11-13 21:35:24 467

原创 poj3276(开关问题)

/*translation: 有n头牛,每头牛要么面朝前方或者面朝后方。现在可以连续驱使连续的k头牛反转。求使得所有的牛面朝前方的最小操作数 和对应的k是多少?solution: 反转开关模型 此类模型的解法如下:首先可以遍历k,现在整个区间可以有多个长度为k的区间,而问题也就随之转化成了从这多个区间里面选择 一些需要反转的区间。进一步观察还可以发现区间的反转顺序也是无关的,对同一个

2016-11-13 21:32:52 1862

原创 poj3685(二分查找第k小)

/*translation: 给出一个矩阵,其中每项的值为:i*i + C*i + j*j - C*j + i*j;(i,j分别为所在的行和列)。求其第m小的数字solution: 二分查找k小数字 观察发现矩阵的规律是从上倒下递增,从左到右递减。可以根据这个规律来二分查找有几个小于当前给出的值。详见代码note:date: 2016.11.5*/#include #incl

2016-11-13 21:27:22 473

原创 poj1222(高斯消元)

/*translation: 有6*5的开关,每次按下一个开关,与之相邻的4个开关状态也会随之改变。给定开始状态,求使得所有开关为0的方法solution: 高斯消元法 首先,假设在开始状态的基础上按下第二行第二列的开关,相当与在原来矩阵的基础上加上矩阵 0 1 0 0 ... 0 1 1 1 0 ... 0 0 1 0 0 ... 0 . . . . . . . . .

2016-11-09 16:23:49 303

原创 poj3579(二分求解第k小/大值)

/*translation: 给出串数列,其中每每两个数的差的绝对值构成一个集合,求这个集合中的中位数。solution: 二分法求第k小/大 首先枚举第k小/大的数值,然后判断是否有k个值小/大于等于它即可,然后不断逼近。 具体快速判断的方法见代码注释。具体复杂度接近O(n)note: *:注意本题快速判断小于等于mid值的个数的方法date: 2016.11.4*/#i

2016-11-04 19:43:54 456

原创 poj3111(均值的二分最大/小化)

/*translation: 给出n件物品,已知每件物品的重量和价值。要从这n件物品中选出k件,使得它们的单位价值最高。该选择哪几件?solution: 均值二分最大化 这道题同样不能用贪心。因为列出公式就可以看到每次的决策和全部的价值总和以及重量总和有关。故简单的贪心肯定是错误的。 所以对于这类问题可以二分枚举最优解,然后转化问题为判断当前枚举的最优解是否可行。即判断sum(V0..

2016-11-04 10:46:33 285

原创 poj3045(简单贪心,根据多个权重排序类型的总结)

/*translation: n头牛要叠罗汉,每头牛有两个属性,力量和重量。每头牛要支撑其上面所有牛的风险是上面所有牛的重量减去这头牛 本身的力量。求一种排列顺序使得最大的风险最少solution: 贪心即可。重量越大力量越大的牛应该在最低下。note: # 一开始以为二分,其实用不着二分 *:对于涉及到需要预先对物品进行排序的算法(特别是贪心之类),经常遇到同一个物品拥有两个属性

2016-11-03 20:37:00 2142

原创 poj2976(二分求解0/1分数规划模型)

/*translation: 给出n场考试,每场考试有总题量,和你答对的题量。现在要求你去掉一些考试项目,使得你的正确率能够达到最大是多少?solution: 0/1分数规划,二分解决 赤裸裸的0/1分数规划,但是此题不能采用dp,因为a,b数据太大,超时。所以考虑采用二分来枚举可能的最大正确率。 然后判断该次枚举的是否可能。这样就转化成了二分确定最大值的问题。现在怎么判断是个问题。因

2016-11-03 20:32:28 479

原创 poj3273(二分最大化最小值)

/*translation: 将N个数字分割成M个段,使得每个段和的最大值最小。solution: 二分最大化最小值即可note: *:这道题注意输出的边界。稍不注意就会错误。现在统一总结下写法: 二分最大(小)化最小(大)值时候。check函数里面=所在的位置决定了是最大化还是最小化 而输出是输出pr是输出最大值,输出pl是输出最小值date: 2016.11.2*/

2016-11-02 20:17:49 409

原创 poj3104(二分判断可行性)

/*translation: 要使得一排衣服晾干,自然风干每分钟蒸发1单位的水分。用烘干机的话每分钟蒸发k单位的水分。求把所有衣物晾干的话至少需要多长时间?solution: 二分查找最小可行解 首先二分枚举最短的时间mid。然后是判断该时间是否可行。可以发现对于水分单位量小于mid的衣服。只需要待其自然风干即可。 而对于a[i]>mid的衣物来说,要使得能够在mid时间内完成衣物的烘

2016-11-02 20:06:49 355

原创 poj2456(二分最大化最小值,贪心)

/*translation: 有n间牛舍在一条直线上面,要住进c头牛。求每头牛之间的最大的最小距离能是多少?solution: 二分最大化最小值,贪心 首先二分枚举最优解,其次就是判定该次最优解是否可行。这一步骤可以按照贪心法来判定。 最后逐步缩小范围。note:date: 2016.11.1*/#include #include #include #include

2016-11-01 23:28:41 400

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除