
=====杂题模型=====
文章平均质量分 58
林伏案
妖蛾子良多的范老爷
展开
-
poj3276(开关问题)
/*translation: 有n头牛,每头牛要么面朝前方或者面朝后方。现在可以连续驱使连续的k头牛反转。求使得所有的牛面朝前方的最小操作数 和对应的k是多少?solution: 反转开关模型 此类模型的解法如下:首先可以遍历k,现在整个区间可以有多个长度为k的区间,而问题也就随之转化成了从这多个区间里面选择 一些需要反转的区间。进一步观察还可以发现区间的反转顺序也是无关的,对同一个原创 2016-11-13 21:32:52 · 1889 阅读 · 0 评论 -
la2678(前缀和,二分/尺取法)
/*translation: 有n个正整数组成一个序列。给定整数s,求长度最短的连续序列,使得他们的和大于等于ssolution: 前缀和,尺取法/二分 这道题可用尺取法或者二分法。 无论是尺取还是二分,都要求出前缀和。用二分法时,枚举起点,然后二分查找满足条件的 终点,同时更新维护答案即可。(根据前缀和的单调性) 如果用尺取法的话,就是最简单的原创 2017-03-11 15:09:49 · 711 阅读 · 0 评论 -
la4276(*数形结合,单调队列求点集斜率极值)
/*translation: 给定一个01数列,选择一个长度至少为L的字串,使得子序列中数字的平均值最大。输出这个子序列的起点和终点 位置solution: 详见论文"浅谈数型结合思想在信息学竞赛中的应用"*/#include #include #include using namespace std;const int maxn = 100000 + 5原创 2017-03-20 22:27:36 · 347 阅读 · 0 评论 -
uva10827(*前缀和,降维)
/*translation: 给出一个矩阵,要求求出一个子矩阵,问这个子矩阵最大的和是多少?solution: 降维,前缀和note: * 将原来的矩阵复制成4份后再组合成一个大矩阵就方便处理了。然后枚举矩阵的范围,复杂度为75*75*75*75 枚举出来后,求出每一列上下界之间的和(利用前缀和可以常数时间内求出)。降维成1维后就是求最大子序列的原创 2017-03-20 22:26:04 · 412 阅读 · 0 评论 -
poj2100(尺取模型,总结)
/*translation: 给出一个数,求一系列连续的数字使得它们的平方和等于这个数solution: 尺取法即可note: #: 这道题有以下几个坑。一是L和R要从1开始,二是判断循环结束时我用了while(R*R<=n&&L*L<=n) 正确姿势是只判断L,因为R有可能在最后一次循环中超出n。 *: 尺取法的总结: 尺取法本质上是将一个区间不断向前推进,以期获得解的过原创 2016-11-14 20:22:06 · 584 阅读 · 0 评论 -
poj2739(尺取模型)
/*translation: 给出一个数,求有多少种用连续的素数之和来表示该数的方法。solution: 尺取法。 预处理筛出数据范围内的所有素数,然后将其存进数组里面,在这个数组的基础上使用尺取即可。note:date: 2016.11.13*/#include #include #include using namespace std;const int maxn原创 2016-11-13 22:28:31 · 308 阅读 · 0 评论 -
poj2566(尺取模型)
/*translation: 给出一串数列,求其中最接近t的一个子串之和是多少?solution: 尺取法。 这道题不能直接对原数组采用尺取,因为原来的数组有正有负。而尺取法使用的条件就是在推进的过程中的单调性, 如果对原数组直接采取尺取,由于原数组正负数都有,导致在推进过程中尺取的和有增加也有减少。故不能采取尺取。 所以考虑对前缀进行排序后,再进行尺取即可。note:date:原创 2016-11-13 22:26:43 · 673 阅读 · 0 评论 -
poj3684(相遇碰撞模型)
/*translation: 将N个半径为R的球放入一个圆桶(圆桶口径刚好放入一个球), 将圆桶竖直放着,最下端距离地面H高度,让球每隔一秒自由下落,求T时刻各个球距离地面的高度。solution: 所有的球都一样可以忽视它们的碰撞,视为互相穿过继续运动。这样就可以分别单独求出每个球T时刻的高度后排序就是答案了。note: 注意在开始处理的时候要将所有的球按照高度与地一个小球一样的高原创 2016-11-13 22:08:01 · 972 阅读 · 0 评论 -
poj3185(开关问题一般解法,以及高斯消元解法)
/*translation: 有20只碗,现在要使得它们全部变成碗口朝上的状态。至少需要多少操作步骤。solution: 按照开关问题解,但是要从最左端和最右边分别开始求解,然后比较。note: #:按照poj3276的解法应该就可以解出来,但是为毛在这里还得对从左和从右求解的结果比较? 难道poj3276的解法本身就有问题?坑待填...date: 2016.11.8*/#原创 2016-11-13 21:39:51 · 722 阅读 · 0 评论 -
poj3279(二维开关问题)
/*translation: 给出一张二维的图表,1表示该处的电灯打开,0表示该处的电灯关闭。每次关闭一盏灯会使得其相邻的上下左右四个位置的灯状态反转。 给出使得灯全灭的最小次数的方案以及对应的每个位置上的操作次数。solution: 二维开关问题。 考虑到每次枚举左上角的灯泡,然后按照一维的开关问题求解。但是这样的话每次的状态选择就成了问题,因为上下左右四个位置都可 使得这个位置状原创 2016-11-13 21:35:24 · 508 阅读 · 0 评论 -
la3716(*数学变形)
/*translation: 给出两条字符串A,B。找出一段最长的子区间,使得区间所有位置x,有不超过p%的位置存在A[x]!=B[x]solution: 利用数学变形 构造一个数列,两字符串相等的位置为0,不等的为1。另sum[i]为前缀和。则就是求 (sum[e]-sum[s])/(e-s)不超过p%的最长长度是多少?note: * 看上去跟LA4原创 2017-03-21 21:59:09 · 518 阅读 · 0 评论