Basic Algorithm
Feynman1999
理论都是灰色的,而生活之树常青^_^
展开
-
快慢指针和其简单应用
什么是快慢指针?快慢指针中的快慢指的是移动的步长,即每次向前移动速度的快慢。例如可以让快指针每次沿链表向前移动2次,慢指针每次向前移动1次。快慢指针的常见应用1.判断单链表是否为循环链表 对于初学循环链表者,可能开始想到的方法就是使用双重循环。当外层循环步进一个节点时,内层循环就遍历外层循环那节点之后的所有节点,然后比较内外循环的两个节点。若有节点地址相等,原创 2017-02-19 10:18:47 · 651 阅读 · 0 评论 -
数列分段(最小化最大值)
problem1对于给定的一个长度为N的正整数数列A[i],现要将其分成连续的若干段,并且每段和不超过M(可以等于M),问最少能将其分成多少段使得满足要求。N≤100000,M≤10^9,M大于所有数的最小值,A[i]之和不超过10^9。思路由于段是连续的,可以贪心,从左往右扫描一遍,每一次超过m停止,将前面这一部分置为一段,统计段数。时间复杂度O(n)" role="pr原创 2018-01-24 23:15:06 · 3256 阅读 · 0 评论 -
分治思想之归并排序
分治算法 分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解。即一种分目标完成程序算法,简单问题可用二分法完成。归并排序归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用原创 2017-02-17 09:54:23 · 422 阅读 · 0 评论 -
分治思想之快速排序
分治算法 分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解。即一种分目标完成程序算法,简单问题可用二分法完成。快速排序快速排序(QuickSort)是对冒泡排序的一种改进。快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排原创 2017-02-17 21:13:44 · 622 阅读 · 0 评论 -
最大子矩阵和(任意子阵,O(n^4)和O(n^3))
引言最近在想怎么更快地去求一个矩阵的任意子阵的最大和,看了一些别人的方法,现在自己总结一下,语言尽可能易懂,希望对大家有所帮助~思路一由HD 1559 改进而得,这题已知子阵的行列,具体可参看我的另一篇文章:http://blog.csdn.net/feynman1999/article/details/57507631代码示例://Author:Fey原创 2017-02-27 20:00:59 · 4314 阅读 · 0 评论 -
最大子序列和(枚举,分治,DP)
零、最大连续子序列和一个N个整数的序列记作{A1,A2,······,AN},求函数的最大值。如果最大的子序列和为负数,那么最大子序列和就认为是0。例如序列{-3,4,-8,10,3,-4,7},其最大连续子序列为{10,3,-4,7},最大连续子序列和为16。一、枚举把所有子列和都找出来,比较暴力哈。代码示例:int MaxSubseqSum1(i原创 2017-02-24 16:21:42 · 1383 阅读 · 0 评论 -
快速幂取模(分治思想)
快速幂取模许多时候我们需要计算a^b %c 如是的式子。一、像下面这样直接来求int res = 1;for(int i = 1;i<=b;i++){ res = res * a;}res = res % c;如果b很大,很容易超时;如果a,b很大,在计算过程中可能会超过long long所能表示的范围,因此想办法优化。二、对于取模运算有原创 2017-03-01 17:04:28 · 1401 阅读 · 0 评论 -
已知参考日期和过了多少天,计算现在的日期
计算现在的日期已知一个参考日期,过了k天,问现在的日期是多少?注①用二维数组保存月的天数以及巧妙利用是否闰年的0,1来决定天数;②用循环将天数转换为月数,月数转换为年数,避免了复杂的判断语句。代码示例:#includeusing namespace std;int mon[2][13]={{0,31,28,31,30,31,30,31,31,30,原创 2017-03-09 20:35:04 · 1821 阅读 · 0 评论 -
求第k小数(分治思想)
第k小数利用快速排序的思想,从序列中取一个数mid,然后把序列分成小于等于mid和大于等于mid的两部分,由两个部分的元素个数和k的大小关系可以确定这个数是在哪个部分。对部分序列的探查可以递归处理。时间复杂度近似为O(n)代码示例//O(n)求sort(升序)后第k位数字#includeusing namespace std;int arr[1000010];原创 2017-03-30 22:44:23 · 3707 阅读 · 1 评论 -
HDU3400 三分经典(速度决策)
problemIn a two-dimensional plane there are two line belts, there are two segments AB and CD, lxhgww’s speed on AB is P and on CD is Q, he can move with the speed R on other area on the plane. How...原创 2018-04-23 17:15:46 · 322 阅读 · 0 评论 -
HihoCoder - 1142
描述这一次我们就简单一点了,题目在此: week40_1.PNG在直角坐标系中有一条抛物线y=ax^2+bx+c和一个点P(x,y),求点P到抛物线的最短距离d。 提示:三分法×提示:三分法在之前的几周中我们了解到二分法作为分治中最常见的方法,适用于单调函数,逼近求解某点的值。 但当函数是凸形函数时,二分法就无法适用,这时就需要用到三分法。 从三分法的名字中我们可以...原创 2018-04-19 20:03:01 · 240 阅读 · 0 评论 -
A - Euclidean TSP UVALive - 6954(三分)
problemThe famous Arora-Mitchell approximation algorithm for the Euclidean Travelling Salesman Problem (Euclidean TSP) was discovered independently by Sanjeev Arora and Joseph S. B. Mitchell in 1...原创 2018-04-19 20:39:51 · 331 阅读 · 0 评论 -
Helvetic Coding Contest 2018 D1(分数类的使用 && hash)
problemThe Rebel fleet is on the run. It consists of m ships currently gathered around a single planet. Just a few seconds ago, the vastly more powerful Empire fleet has appeared in the same solar s...原创 2018-05-01 22:40:38 · 228 阅读 · 2 评论 -
CF contest 985 D贪心、二分
Problemhttp://codeforces.com/contest/985/problem/D题目大意:给你一个n和h把n分解为一些数的和,要求第一个数<=h<=hn=18h=10n=18h=10n=18 \quad h=10 则分法为 5,4,3,3,2,1 即18-15=3 所以有两个3然后,考虑h的限制,那我第一个数一定取h,后面的数,满足“...原创 2018-05-23 18:23:20 · 253 阅读 · 0 评论 -
洛谷P4169 [Violet]天使玩偶/SJY摆棋子(CDQ分治)
洛谷 P4169 [Violet]天使玩偶/SJY摆棋子https://www.luogu.org/problemnew/show/P4169对于曼哈顿距离 考虑四个方向分别求解,因此现在考虑一个方向如何求解cdq分治时,左边的修改会对右边的询问产生影响,于是使用树状数组维护。那么具体什么样的左边的点会对右边造成影响呢?当然是两个坐标都小于等于询问辣,那么我们对左边点进行排序(不用sort,...原创 2018-11-12 15:53:06 · 413 阅读 · 0 评论 -
2018沈阳k(经典的约瑟夫环)
地址K Let the Flames Begin首先,对于经典的约瑟夫环问题,我们记f(n,m)f(n,m)f(n,m)表示初始有nnn个人,第mmm个出队的人是谁(从0号开始报数)。则有递推式f(n,m)=(f(n−1,m−1)+k) % nf(n,m)=(f(n-1,m-1)+k)\ \%\ nf(n,m)=(f(n−1,m−1)+k) % n ...原创 2018-11-17 11:21:36 · 1039 阅读 · 0 评论 -
今天星期几?
星期几?经常会遇到别人问你几月几号是星期几的情况?如果不查日历,直接用程序如何计算?一种直接的方法是,以某一天为参考,一天一天模拟,计算出待求天是星期几?还有一种方法是利用基姆拉尔森计算公式。假设星期为w,年份为y,月份为m,日期为d。w=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7最后把计算出来的w值加上1即为所求结果原创 2017-03-09 17:22:26 · 741 阅读 · 0 评论 -
希尔排序(Shellsort)简介
希尔排序希尔排序(Shell Sort)是D.L.Shell于1959年提出的一种排序算法,在这之前排序算法的时间复杂度都是O(n^2)级别的,希尔排序算法是突破这个时间复杂度的第一批算法之一。可以说,希尔排序是直接插入排序的一种改进。对于直接插入排序,它的效率在有些时候是很高的,比如记录本身是无序度很低的,我们只需要少量的插入操作,就可以完成整个记录的排序工作。基于此,希尔研究出原创 2017-06-02 20:29:20 · 639 阅读 · 0 评论 -
堆与堆排序
引言在简单选择排序中,我们每一趟比较时并没有将比较的结果保存下来,这样下一趟可能会产生重复的比较,导致效率降低。如果可以做到每次在选择到最小记录的同时,并根据比较结果对其他记录做出相应的调整,那样排序的总体效率就会非常高了。下面要介绍的堆排序就是对简单选择排序的一种改进,是由Floyd和Williams在1964年共同发明的,同时,他们发明了"堆"这一数据结构。原创 2017-06-03 19:27:49 · 527 阅读 · 0 评论 -
栈(stack)的抽象数据类型及进栈出栈次序
栈的抽象数据类型ADT 栈 (stack)Data 同线性表。元素具有相同的类型,相邻元素具有前驱和后继关系。Operation InitStack(*s):初始化操作,建立一个空栈S. DestroyStack(*S):若栈存在,则销毁它 ClearStack(*S):将栈清空 StackE原创 2017-03-11 22:40:31 · 1116 阅读 · 0 评论 -
HD 2062(子集的字典序排列)
Subset sequenceTime Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 5909 Accepted Submission(s): 2784Problem DescriptionConsider the原创 2017-03-30 21:04:58 · 539 阅读 · 0 评论 -
八皇后问题(递归)
八皇后问题Feynman和朋友们下国际象棋,(棋盘为8x8)。下到兴致之处,Feynman突发奇想:如果将64个格子分别赋值,并拿出八个皇后棋子(国际象棋中的皇后可以将同一行、同一列和同一对角线上的对方棋子吃掉。)Feynman想怎么摆放这八个皇后的位置才能让她们不互相攻击的同时八个皇后所在格子的和最大。输入格式每个棋盘有6464个数字,分成88行8列输入,就如样例所示原创 2017-03-31 19:02:47 · 630 阅读 · 0 评论 -
开公司(排列枚举、DFS)
题目描述Feynman有一天开了自己的公司,现在他有n件事情待解决,他手下恰好有n人。于是Feynman想要将这n件事分给n个人去做。已知每个人都可以做每件事,但是每个人做每件事的效率不同。下面给出每件事不同人做所需时间,请帮Feynman挑选合适的人去做事,使得总时间最短。输入格式第一行输入一个整数N,代表有N个员工,员工编号从1到N。(1接着输入一个N*N的二维原创 2017-03-31 22:35:10 · 335 阅读 · 0 评论 -
地毯填补问题(分治)(AOJ 859)
点击打开链接地毯填补问题Description相传在一个古老的阿拉伯国家里,有一座宫殿。宫殿里有个四四方方的格子迷宫,国王选择驸马的方法非常特殊,也非常简单:公主就站在其中一个方格子上,只要谁能用地毯将除公主站立的地方外的所有地方盖上,美丽漂亮聪慧的公主就是他的人了。公主这一个方格不能用地毯盖住,毯子的形状有所规定,只能有四种选择(如图2):并且每一方格只能用一层地原创 2017-04-29 15:44:33 · 2012 阅读 · 0 评论 -
函数(递归,记忆化搜索)
点击打开链接函数Description计算ackerman函数值:Input第一行为两个数,即M和N,其中0Output输出ack(m,n)的值。Sample Input0 1Sample Output2思路由于数据量较小(0考虑记忆化搜索进行优化,利用数组对值进行储存,后面的值直原创 2017-05-03 15:43:31 · 650 阅读 · 0 评论 -
BUAA 1033 (三分枚举计算 点到线段的最短距离)
Easy Problem时间限制:1000 ms | 内存限制:65536 KB描述In this problem, you're to calculate the distance between a point P(xp, yp, zp) and a segment (分段、线段)(x1, y1, z1) and(x2, y2, z2), in a 3D原创 2017-04-22 22:08:04 · 567 阅读 · 0 评论 -
POJ 3301 (坐标变换、三分枚举计算 点集最小正方形覆盖)
Texas TripDescriptionAfter a day trip with his friend Dick, Harry noticed a strange pattern of tiny holes in the door of his SUV. The local American Tire store sells fiberglass patching material原创 2017-04-22 21:15:02 · 1313 阅读 · 0 评论 -
孙云球(二分枚举)(AOJ 851)
点击打开链接孙云球Description大家一起来玩孙云球吧。众所周知,孙云球是一种好玩有炫酷的球类游戏,由编程始祖 SLF 发明。但是评价一个球队的战力是的特殊的,给定 n 个人,每个人的身高是 a[i],每有一个三个人的组合(x,y,z)满足以下条件即可提供 1 的战斗力。条件如下:1. a[x] 2. a[y] – a[x] ≤ a[z] – a[原创 2017-05-06 21:23:52 · 1294 阅读 · 0 评论 -
HDU1237(表达式求值)
Problem读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。Input测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。Output对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。Sample Input1 + 24 + 2 ...原创 2019-03-10 20:15:33 · 550 阅读 · 0 评论