
分治
文章平均质量分 52
小白菜又菜
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Leetcode 372. Super Pow
【代码】Leetcode 372. Super Pow。原创 2025-04-19 13:53:41 · 711 阅读 · 0 评论 -
UVa 10297 - Beavergnaw
题目:如果一个底边与高为D的圆柱切去一部分使得,剩下的中心是底边与高为d的圆柱, 和以他们底面为上下地面的圆锥台,已知切去的体积,求d。分析:二分,计算几何。圆锥台体积公式:π*(r^2+r*R+R^2)*h / 3。说明:可以直接用公式求指数计算。#include #include #include #include using namespa原创 2014-10-14 12:39:19 · 1400 阅读 · 0 评论 -
UVa 486 - English-Number Translator
题目:给你一个数字的英文写法,翻译成阿拉伯数字(没有and)。分析:模拟,递归。这个可以用很多方法求解吧。 这里利用递归,将数字分成几个部分的和(只考虑百万,千,万),分别求解相加即可。说明:(⊙_⊙)。#include #include #include #include #include #include using namespace st原创 2014-12-02 21:02:45 · 3006 阅读 · 0 评论 -
hdu 1007 - Quoit Design
题目:最近点对。分析:分治。UVa 10245类似物,这里要优化一下计算两个区间各取一点的情况,提高效率。 在计算两个集合各取一点定位情况同水平方向一样,将点按竖直方向排序,利用单调性; 减少计算次数可以提高效率。说明:UVa和uhunt不好上( ⊙ o ⊙ )啊!#include #include #include #incl原创 2015-01-31 16:34:10 · 706 阅读 · 0 评论 -
UVa 10509 - R U Kidding Mr. Feynman?
题目:函数的渐进解,利用式子f(x+dx)= f(x)+ f`(x)dx,求x+dx; 其中x为f(x)处理求解的整数解,反推dx = (f(x+dx)- f(x))/f`(x)。分析:分治。这里f(x) = x^3,直接利用二分求解x的最近整数解,然后接dx = (n-a^3)/(3a^2); 整理求解x+dx即可。说明:这里不能使用库原创 2015-02-16 21:12:13 · 1142 阅读 · 0 评论 -
UVa 1476 - Error Curves
题目:给你n条开口向上的二次曲线Si(a>0),定义F(x) = max(Si(x)),求F(x)的最小值。分析:三分。F(x)是一个单峰函数,先单调递减后单调递增,利用三分求最小值。 首先,证明两个二次函数构造的F2(x)为单峰函数; (如果不成立,则存在两个连续的波谷,那么交点处一个函数递增另一个递减,矛盾原创 2015-05-10 09:28:29 · 1420 阅读 · 2 评论 -
UVa 10385 - Duathlon
题目:有一个比赛分成跑步和骑车两部分,总长度一定(L),最后的参赛者贿赂了裁判, 裁判会调节两部分的比例,他想要求超过第二名的最大值。分析:三分求单峰函数最值。设第一部分长度是x,第二部分的长度是L-x,t(x)= x / v +(L-x)/ u; f(x)= max(x / vn +(L-x)/ un -(x / vi +(L-x)/ ui原创 2015-05-10 23:59:35 · 1346 阅读 · 0 评论 -
UVa 10689 - Yet another Number Sequence
题目:给你Fib数列的前两项,求第n项的后m位的值。分析:矩阵快速模幂。见本博客的:斐波那契数列说明:╮(╯▽╰)╭。#include #include #include #include #include #include using namespace std;class matrix{ private: int data[2][2]; public:原创 2015-05-11 20:34:20 · 780 阅读 · 0 评论 -
UVa 11149 - Power of Matrix
题目:一直方阵A,计算A + A^2 + A^3 + ... + A^n。分析:分治,快速模幂。 设F(n)= A + A^2 + A^3 + ... + A^n则有; F(n)= F(n/2)+ F(n/2)* A^(n/2)+ R;(n为奇数存在R,为A^n) = F(n/2){E +原创 2015-05-11 23:41:28 · 1292 阅读 · 0 评论 -
UVa 1230 - MODEX
題目:計算x^y mod n的值。分析:分治,快速模冪。赤果果的快速模冪。說明:╮(╯▽╰)╭。#include #include typedef long long LL;LL mpow(LL a, LL n, LL m){ if (n == 1LL) return a; LL h = mpow(a, n/2, m); if (n%2LL) return (h原创 2015-11-23 10:15:32 · 641 阅读 · 0 评论 -
hdu 2035 - 人见人爱A^B
題目:計算A^B的后三位。分析:數論,分治。利用mod的性質和分治快速模冪算法求解。說明:╮(╯▽╰)╭。#include#includeusing namespace std;int fpow(int a, int n, int mod){ if (n == 1) { return a%mod; } int v = fpow(a, n/2, mod); if原创 2016-04-28 09:34:24 · 411 阅读 · 0 评论 -
二分查找中的死循环
二分算法是我们经常会用到的一个算法。它是分治法的一个应用。不过,虽然他写起来貌似很简单,但是却很容易写错。下面我们讨论一下二分的死循环问题。(这里讨论的是整数的二分问题,浮点数的二分不容易死循环)1.查找的元素确定,值唯一或者不存在 这种情况等下,我们的流程分为三个分支:(相等、小于、大于)。这类不容易死循环,代码如下:if ( data[mid] ==......原创 2014-09-13 17:35:37 · 7440 阅读 · 4 评论 -
UVa 11157 - Dynamic Frog
题目:有一只青蛙要去对岸找东西然后返回,因为河水被污染了,所以只能踩着石头过河, 石头有两种:B石头可以无限次使用,S石头使用一次就沉下去了,计算一个路径, 使得最长的跳跃距离最小。分析:贪心,二分。二分最大长度,利用贪心判定是否可以跳过去再回来。 设计贪心策略(最大跳跃距离为L时): 1原创 2017-07-19 16:34:12 · 1194 阅读 · 0 评论 -
UVa 11683 - Laser Sculpture
题目:利用激光切割机切削一个矩形的材料,每次只能从上向下切掉1mm后的矩形, 问切削成如下给出的形状需要切削多少次。分析:线段树,数据结构。将图形看成是二叉树,从上往下按最高的点分段即可。 整个切削过程遇到极大值点就会分成两段,就是一个构造二叉树的过程; 这里不用构造树,利用递归分别计算分段的两个子树即可;原创 2017-07-24 16:38:44 · 451 阅读 · 0 评论 -
UVa 10611 - The Playboy Chimp
题目:一只公猩猩有一个母猩猩的身高序列(feidijia)原创 2014-07-19 23:34:38 · 1420 阅读 · 2 评论 -
UVa 11115 - Uncle Jack
题目:求N^D。分析:分治,快速幂,大整数模拟。利用数组模拟大整数快速幂。说明:打表加快速度。应该写一个大整数类了。#include #include #include using namespace std;class BigInteger{ private: int size; int data[31]; public: BigInteger() {原创 2018-01-01 17:10:45 · 608 阅读 · 0 评论 -
UVa 183 - Bit Maps
题目 黑白图片存储有两种格式:位图格式和压缩格式; 位图格式:使用一个矩阵(元素为01)来表示一个黑白图片; 压缩格式:图像是单一颜色(全都是0或1),则图像为对应的值(0或1),否则图像的值为D,并将图形分成四个矩形(不能平均分时左侧和上侧多取一个像素),分别判断四个子图像,按照从上到下、从左到右的顺序组成一个字符串; 现在已知两种格式的某一种,需要转化到另一种;...原创 2018-04-04 14:04:59 · 436 阅读 · 0 评论 -
UVa 11428 - Cubes
题目:给定一个正整数N求出满足N = x^3 - y^3的y最小的正整数对(x,y)。分析:数论,分治。 x^3 - y^3 = (x-y)(x^2 + xy + y^2); 因为,x、y都是正整数,且x > y,则x^3 - y^3 > (x-y)(3y^3); 因为N是1~10000(x-y)与(x^2 + xy原创 2014-10-28 11:09:12 · 2236 阅读 · 0 评论 -
UVa 10539 - Almost Prime Numbers
题目:Almost Prime Numbers是只有一个素数因子的数,统计一个区间中的Almost Prime Numbers。分析:数论,分治。根据定义可知Almost Prime Numbers就是素数的幂(大于1次)。 首先,利用筛法计算出1000000内的素数(至少的素数的平方); 然后,计算所有的素数的小于1000000000000原创 2014-10-08 18:02:39 · 2374 阅读 · 0 评论 -
UVa 10170 - The Hotel with Infinite Rooms
题目:求从s开始的递增序列(每次加1),求出他们加和不小于D的那个最后的加数。分析:数学题,分治。s + s+1 + ... + n = n*(n+1)/2 - s*(s-1)/2 = (n+s)*(n-s+1)/2。 直接二分答案即可(二分范围0~10^8)。说明:(⊙_⊙)。#include #include using namespace st原创 2014-09-29 18:05:01 · 2411 阅读 · 0 评论 -
hdu 4036 - Rolling Hongshu
题目:一个红薯想去见他的女朋友,他要有一个初始速度,才能翻越高山,问罪最小初速度。分析:物理题,能量守恒 。 这道题目也是简单题目,按照能量守恒进行求解就没有问题了; 求出苦土豆到达起点的速度的最大值,并且求出所有山顶到起点的最大速度,取最大即可; 求解坐标有点麻烦,不过可以直接用比例计算,每次可利用二分优化找到对应原创 2014-09-20 10:02:18 · 1005 阅读 · 0 评论 -
hdu 4208 - The time of a day
题目:从1~n去若干个数字,使得他们的最小公倍数不小于M的有多少种。分析:dp,数论,搜索。其实就是一个背包类似物。(貌似离散化dp写起来很简洁) 由于每个素数因子的个数有限(不超过20个)直接打表(dfs)计算出所有的最小公倍数; 然后DP更行最小公倍数即可; 这个题目要做一些优化(囧,TLE一次):原创 2014-09-20 10:29:05 · 962 阅读 · 0 评论 -
UVa 10668 - Expanding Rods
题目:有一个金属版,夹在墙中间,他会受热膨胀(1+n*c)原创 2014-09-17 21:39:18 · 895 阅读 · 0 评论 -
zoj 1188 - DNA Sorting
题目:给你一些DNA串,按nixush分析:说明:原创 2014-09-16 12:46:31 · 605 阅读 · 0 评论 -
zoj 2386 - Ultra-QuickSort
题目:只允许交换相邻元素的排序,统计将最小交换次数。分析:分治,逆序数。在合并排序的过程中进行逆序对的求解。 合并A,B两个字串时利用两根指针作为计数; 当B中元素放入新数组时A中所剩元素一定大于B; 每次计数加和即可。说明:置换群 可以用来计算任意最小交换。。。 (2011-09-20 14:25)#in原创 2014-09-16 08:34:40 · 915 阅读 · 0 评论 -
UVa 10487 - Closest Sums
题目:给你n个数字a[1~n],以及m个数字b[1-m],对于每个b[i]找到对应的两个a[j],a[k]使得他们的和最接近b[i]。分析:分治,二分。有两种方式: 1.先计算所有a的组合,然后对于每个b二分求解即可O(n*n*logn); 2.对于每个b,枚举多有的a,利用二分找到最最接近b-a的数即可O(n*m*lgn)。说明:注意一原创 2014-08-14 03:26:02 · 1035 阅读 · 0 评论 -
UVa 10245 - The Closest Pair Problem
题目:最近点对(大数据)。分析:分治法。首先,将所有点按很坐标排序;然后,利用分治求解。 1.将问题转化为两个相同大小的子区间分别求解; 2.中位点为中心,当前最小距离为半径的区间直接枚举求解; 3.求出上两中情况的最小值返回。说明:这么经典的题目,今天第一次做。#include #include #in原创 2014-07-01 22:12:58 · 2922 阅读 · 3 评论 -
UVa 11495 - Bubbles and Buckets
题目:求给定序列的逆序数。分析:分治、逆序数、归并排序。利用mergesort求逆序数,时间复杂度O(nlogn)。一个序列的逆序数 = 左半序列的逆序数+右半序列的逆序数+两半之间的逆序数。因为每半序列是排好序的,所以逆序数为合并时每次选择右半段序列的元素时,左序列还留有的元素个数。#include #include #include int P[ 100005 ]; int原创 2012-11-23 17:57:23 · 1683 阅读 · 0 评论 -
一元三次方程的分治解法
/* 2011-09-21 f(x)=ax^3+bx^2+cx+d 分析:设三个根为 x0,x1,x2 有 f(x)=a(x-x0)(x-x1)(x-x2)有(韦达定理) -b = a(x0+x1+x2) c = a(x0x1+x1x2+x2x3) -d = ax0x1x2原创 2014-03-24 02:25:00 · 3427 阅读 · 0 评论 -
UVa 10229 - Modular Fibonacci
题目:求第n个Fib数与2^m的模。分析:分治,快速幂。 具体参照本人的 斐波那契数列(http://blog.youkuaiyun.com/mobius_strip/article/details/8222309) 中 4.Fib的计算3:分治法; 设Jn为第n个月有生育能力的兔子数量,An为这一月份的兔子数量。得到如下递推矩原创 2014-09-03 11:15:53 · 1445 阅读 · 0 评论 -
斐波纳契数列(Fibonacci Sequence)
斐波纳契数列(Fibonacci Sequence) 0.前言很久以前就想写一些竞赛学习的总结,但是由于之前事情比较多,导致计划不断的减缓。现在,大学教学任务的考试已经全部结束了,而比赛也告一段落,所以有时间来整理一下之前学过的东西。不久前,在做比赛的时候遇到了这样一个问题:求出第N个斐波纳契数的前M位和后K位。所以就将斐波纳契数列(Fibonacci Sequence)作为第一步原创 2012-11-25 14:21:15 · 6680 阅读 · 0 评论 -
UVa 12124 - Assemble
题目:你要去自己买个组装机,现在给你每个零件的类别、名字、价钱、级别,以及你有的钱数, 求能组装成的机器的最大级别(机器的所有零件中的最小级别,即最小值最大)。分析:分治、dp。看起来很像是dp,不过本题可以利用二分求解(我这里二分套二分了)。 首先,将所有的零件按照级别递减排序,此时装机的总代价递减(比原来多了新的参考零件);原创 2014-08-04 23:02:22 · 1170 阅读 · 0 评论 -
zoj 1484 - Minimum Inversion Number
题目:求一个分析:原创 2014-09-16 16:15:41 · 595 阅读 · 0 评论 -
zoj 2527 - Series
题目:计算最长的等差数列长度。分析:dp,LIS类似物,二分。先排序,然后枚举前面的所有点作为前一个元素求公差即可。 更新时,利用二分找到,距离当前位置最近的前第二元素, 如果不存在,则直接更新为 2即可。 说明:如果数据范围小的话,可在连续区间dp(O(L^2))。(2011-10-03 17:34)#include #inclu原创 2014-09-26 00:25:07 · 1220 阅读 · 0 评论 -
UVa 11614 - Etruscan Warriors Never Play Chess
题目:有这样一种编排,第一组有1个人,第二组有2个人,..,第k组有k个人,现在有n个人,问能构成前几组。分析:数论,分治。显然这个序列是一个前k项和,那么输出(k+1)*k /2不超过n的最大k值即可;二分或开方。说明:数据较大,用long long。#include #include #include using namespace std;typedef long l原创 2014-10-22 19:52:16 · 1345 阅读 · 0 评论 -
UVa 11621 - Small Factors
题目:找到不小于给定数n的,仅以2,3为因数组成的数字。分析:数论,贪心,分治。 利用两根指针,分别代表乘2,与乘3的队列,队列为至今生成的数字,初始为{1}; 然后,每取两个指针对应元素*2和*3的值中最小的即为未找到的数字中最小的; 注意,可能生成重复数据,不要存进去(重复数据,一定连续产生)。说明:打表计算原创 2014-10-25 15:40:24 · 1554 阅读 · 0 评论 -
hdu 4004 - The Frog's Games
题目:有一些岛屿,分布在一条线上,问青蛙最少的能力是跳多远,可以不超过m次跳刀对岸。分析:贪心,二分。已知能力的话,每次跳到最远即可,所以二分能力即可。说明:2011大连网选题4。(2011-09-19 01:09)#include #include int Leng[ 500005 ];int Data[ 500005 ];int Queue[ 500005 ];原创 2014-09-18 15:25:06 · 892 阅读 · 0 评论