
算法
cx1165597739
这个作者很懒,什么都没留下…
展开
-
P1017 进制转换
题目描述我们可以用这样的方式来表示一个十进制数: 将每个阿拉伯数字乘以一个以该数字所处位置的(值减11)为指数,以1010为底数的幂之和的形式。例如:123123可表示为1 \times 10^2+2\times 10^1+3\times 10^01×102+2×101+3×100这样的形式。与之相似的,对二进制数来说,也可表示成每个二进制数码乘以一个以该数字所处位置的(值-1−1...原创 2019-07-22 17:35:21 · 329 阅读 · 0 评论 -
P1045 麦森数
题目描述形如2^{P}-12P−1的素数称为麦森数,这时PP一定也是个素数。但反过来不一定,即如果PP是个素数,2^{P}-12P−1不一定也是素数。到1998年底,人们已找到了37个麦森数。最大的一个是P=3021377P=3021377,它有909526位。麦森数有许多重要应用,它与完全数密切相关。任务:从文件中输入PP(1000<P<31000001000<P<...原创 2019-07-22 17:30:37 · 228 阅读 · 0 评论 -
P2158 [SDOI2008]仪仗队
题目描述作为体育委员,C君负责这次运动会仪仗队的训练。仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如下图)。现在,C君希望你告诉他队伍整齐时能看到的学生人数。输入输出格式输入格式:共一个数N输出格式:共一个数,即C君应看到的学生人数。输入输出样例...原创 2019-07-22 17:25:15 · 127 阅读 · 0 评论 -
P1582 倒水(位运算)
题目描述一天,CC买了N个容量可以认为是无限大的瓶子,开始时每个瓶子里有1升水。接着~~CC发现瓶子实在太多了,于是他决定保留不超过K个瓶子。每次他选择两个当前含水量相同的瓶子,把一个瓶子的水全部倒进另一个里,然后把空瓶丢弃。(不能丢弃有水的瓶子)显然在某些情况下CC无法达到目标,比如N=3,K=1。此时CC会重新买一些新的瓶子(新瓶子容量无限,开始时有1升水),以到达目标。现在CC想...原创 2019-07-22 12:22:29 · 287 阅读 · 0 评论 -
P1090 合并果子
题目描述在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。多多决定把所有的果子合成一堆。每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。可以看出,所有的果子经过n-1n−1次合并之后, 就只剩下一堆了。多多在合并果子时总共消耗的体力等于每次合并所耗体力之和。因为还要花大力气把这些果子搬回家,所以多多在合并果子时要尽可能地节省...原创 2019-07-25 01:34:58 · 158 阅读 · 0 评论 -
P1282 多米诺骨牌
题目描述多米诺骨牌有上下2个方块组成,每个方块中有1~6个点。现有排成行的上方块中点数之和记为S1,下方块中点数之和记为S2,它们的差为|S1-S2|。例如在图8-1中,S1=6+1+1+1=9,S2=1+5+3+2=11,|S1-S2|=2。每个多米诺骨牌可以旋转180°,使得上下两个方块互换位置。 编程用最少的旋转次数使多米诺骨牌上下2行点数之差达到最小。对于图中的例子,只要将...原创 2019-05-28 17:35:15 · 340 阅读 · 0 评论 -
P1140 相似基因
题目背景大家都知道,基因可以看作一个碱基对序列。它包含了44种核苷酸,简记作A,C,G,TA,C,G,T。生物学家正致力于寻找人类基因的功能,以利用于诊断疾病和发明药物。在一个人类基因工作组的任务中,生物学家研究的是:两个基因的相似程度。因为这个研究对疾病的治疗有着非同寻常的作用。题目描述两个基因的相似度的计算方法如下:对于两个已知基因,例如AGTGATGAGTGATG和GTT...原创 2019-05-28 16:41:52 · 212 阅读 · 0 评论 -
石子合并
题目描述在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分。试设计出1个算法,计算出将N堆石子合并成1堆的最小得分和最大得分.输入输出格式输入格式:数据的第1行试正整数N,1≤N≤100,表示有N堆石子.第2行有N个数,分别表示每堆石子的个数.输出格式:输出共...原创 2019-05-28 15:20:16 · 359 阅读 · 0 评论 -
P1280 尼克的任务
题目描述尼克每天上班之前都连接上英特网,接收他的上司发来的邮件,这些邮件包含了尼克主管的部门当天要完成的全部任务,每个任务由一个开始时刻与一个持续时间构成。尼克的一个工作日为N分钟,从第一分钟开始到第N分钟结束。当尼克到达单位后他就开始干活。如果在同一时刻有多个任务需要完成,尼克可以任选其中的一个来做,而其余的则由他的同事完成,反之如果只有一个任务,则该任务必需由尼克去完成,假如某些任务开...原创 2019-05-27 17:22:04 · 147 阅读 · 0 评论 -
P1091 合唱队形
题目描述NN位同学站成一排,音乐老师要请其中的(N-KN−K)位同学出列,使得剩下的KK位同学排成合唱队形。合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2,…,K1,2,…,K,他们的身高分别为T_1,T_2,…,T_KT1,T2,…,TK, 则他们的身高满足T_1<...<T_i>T_{i+1}>…>T_K(1 \le i \le K)...原创 2019-05-22 17:14:19 · 181 阅读 · 0 评论 -
成绩排序题目
题目描述有N个学生的数据,将学生数据按成绩高低排序,如果成绩相同则按姓名字符的字母序排序,如果姓名的字母序也相同则按照学生的年龄排序,并输出N个学生排序后的信息。输入描述:测试数据有多组,每组输入第一行有一个整数N(N<=1000),接下来的N行包括N个学生的数据。每个学生的数据包括姓名(长度不超过100的字符串)、年龄(整形数)、成绩(小于等于100的正数)。输出描述:...原创 2019-05-13 14:37:52 · 422 阅读 · 0 评论 -
遍历链表
题目描述建立一个升序链表并遍历输出。输入描述:输入的每个案例中第一行包括1个整数:n(1<=n<=1000),接下来的一行包括n个整数。输出描述:可能有多组测试数据,对于每组数据,将n个整数建立升序链表,之后遍历链表并输出。示例1输入复制43 5 7 9输出复制3 5 7 9使用堆排序排序后,构造链表,再遍历输出...原创 2019-05-13 14:36:49 · 597 阅读 · 0 评论 -
P1020 导弹拦截
题目描述某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。输入导弹依次飞来的高度(雷达给出的高度数据是\le 50000≤50000的正整数),计算这套系统最多能拦截多少导弹...原创 2019-05-21 18:29:11 · 217 阅读 · 0 评论 -
P1029 最大公约数和最小公倍数问题
题目描述输入22个正整数x_0,y_0(2 \le x_0<100000,2 \le y_0<=1000000)x0,y0(2≤x0<100000,2≤y0<=1000000),求出满足下列条件的P,QP,Q的个数条件: P,QP,Q是正整数 要求P,QP,Q以x_0x0为最大公约数,以y_0y0为最小公倍数. 试求:满足条件的所有可...原创 2019-07-22 17:37:52 · 365 阅读 · 0 评论 -
P1019 单词接龙
题目描述单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相连时,其重合部分合为一部分,例如beastbeast和astonishastonish,如果接成一条龙则变为beastonishbeastonish,另外相邻的两部分不能存在包含关系,例如atat和ati...原创 2019-08-08 14:14:12 · 110 阅读 · 0 评论 -
P1101 单词方阵
题目描述给一n \times nn×n的字母方阵,内可能蕴含多个“yizhong”单词。单词在方阵中是沿着同一方向连续摆放的。摆放可沿着88个方向的任一方向,同一单词摆放时不再改变方向,单词与单词之间可以交叉,因此有可能共用字母。输出时,将不是单词的字母用*代替,以突出显示单词。例如:输入: 8 输出: qyizhong ...原创 2019-08-08 14:59:23 · 224 阅读 · 0 评论 -
分而治之
方法介绍对于海量数据而言,由于无法一次性装进内存处理,导致我们不得不把海量的数据通过hash映射分割成相应的小块数据,然后再针对各个小块数据通过hash_map进行统计或其它操作。那什么是hash映射呢?简单来说,就是为了便于计算机在有限的内存中处理big数据,我们通过一种映射散列的方式让数据均匀分布在对应的内存位置(如大数据通过取余的方式映射成小数存放在内存中,或大文件映射成多个小文件)...转载 2019-08-13 22:01:33 · 170 阅读 · 0 评论 -
最大连续子数组和
题目描述输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。 求所有子数组的和的最大值,要求时间复杂度为O(n)。例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2, 因此输出为该子数组的和18。分析与解法解法一求一个数组的最大子数组和,我想最直观最野蛮的办法便...原创 2019-08-13 21:01:16 · 223 阅读 · 0 评论 -
寻找最小的k个数
题目描述输入n个整数,输出其中最小的k个。分析与解法解法一要求一个序列中最小的k个数,按照惯有的思维方式,则是先对这个序列从小到大排序,然后输出前面的最小的k个数。至于选取什么的排序方法,我想你可能会第一时间想到快速排序(我们知道,快速排序平均所费时间为n*logn),然后再遍历序列中前k个元素输出即可。因此,总的时间复杂度:O(n * log n)+O(k)=O(n * lo...原创 2019-08-13 20:52:17 · 389 阅读 · 0 评论 -
字符串的全排列
题目描述输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则输出由字符a、b、c 所能排列出来的所有字符串abc、acb、bac、bca、cab 和 cba。分析与解法解法一、递归实现从集合中依次选出每一个元素,作为排列的第一个元素,然后对剩余的元素进行全排列,如此递归处理,从而得到所有元素的全排列。以对字符串abc进行全排列为例,我们可以这么做:以ab...原创 2019-08-13 20:48:58 · 206 阅读 · 0 评论 -
最长回文子串
题目描述给定一个字符串,求它的最长回文子串的长度。分析与解法最容易想到的办法是枚举所有的子串,分别判断其是否为回文。这个思路初看起来是正确的,但却做了很多无用功,如果一个长的子串包含另一个短一些的子串,那么对子串的回文判断其实是不需要的。解法一那么如何高效的进行判断呢?我们想想,如果一段字符串是回文,那么以某个字符为中心的前缀和后缀都是相同的,例如以一段回文串“aba”为例,以...原创 2019-08-13 20:45:08 · 108 阅读 · 0 评论 -
P1219 八皇后
题目描述检查一个如下的6 x 6的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行、每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子。上面的布局可以用序列2 4 6 1 3 5来描述,第i个数字表示在第i行的相应位置有一个棋子,如下:行号 1 2 3 4 5 6列号 2 4 6 1 3 5这只是跳棋放置的一个解。请编一个程序找出所有跳棋放置的解。并把...原创 2019-08-06 23:40:53 · 177 阅读 · 0 评论 -
字符串包含
题目描述给定两个分别由字母组成的字符串A和字符串B,字符串B的长度比字符串A短。请问,如何最快地判断字符串B中所有字母是否都在字符串A里?为了简单起见,我们规定输入的字符串只包含大写英文字母,请实现函数bool StringContains(string &A, string &B)比如,如果是下面两个字符串:String 1:ABCDString 2:B...原创 2019-08-13 20:34:39 · 2158 阅读 · 0 评论 -
1.1 旋转字符串
题目描述给定一个字符串,要求把字符串前面的若干个字符移动到字符串的尾部,如把字符串“abcdef”前面的2个字符'a'和'b'移动到字符串的尾部,使得原字符串变成字符串“cdefab”。请写一个函数完成此功能,要求对长度为n的字符串操作的时间复杂度为 O(n),空间复杂度为 O(1)。三步反转法对于这个问题,换一个角度思考一下。将一个字符串分成X和Y两个部分,在每部分字符串上定义反...原创 2019-08-13 20:32:27 · 214 阅读 · 0 评论 -
排序算法(三):计数排序与桶排序
插入排序、堆排序、归并排序等排序方法,在排序的最终结果中,各个元素的次序依赖于他们之间的比较,我们把这一类的排序算法称为比较排序。在最坏情况下,任何比较排序算法都要经过 Omega(nlgn)次比较。因此堆排序和归并排序都是渐近最优的比较排序算法。计数排序、基数排序和桶排序因为不采用比较排序方法,因此可以打破其下界。本文主要介绍计数排序和桶排序。一、计数排序计数排序假设n个输入元素中的每...转载 2019-08-13 20:22:46 · 428 阅读 · 0 评论 -
P1605 迷宫
题目背景给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过。给定起点坐标和终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案。在迷宫中移动有上下左右四种方式,每次只能移动一个方格。数据保证起点上没有障碍。题目描述无输入格式第一行N、M和T,N为行,M为列,T为障碍总数。第二行起点坐标SX,SY,终点坐标FX,FY。接下来T行,每行为障碍点的坐标。...原创 2019-08-08 19:14:22 · 348 阅读 · 0 评论 -
kmp算法
匹配的过程是这样的已知空格与D不匹配时,前面六个字符"ABCDAB"是匹配的。查表可知,最后一个匹配字符B对应的"部分匹配值"为2,因此按照下面的公式算出向后移动的位数: 移动位数 = 已匹配的字符数 - 对应的部分匹配值因为 6 - 2 等于4,所以将搜索词向后移动4位。10.因为空格与C不匹配,搜索词还要继续往后移。这时,已匹配的字符数为2("AB"),...原创 2019-05-16 12:05:24 · 94 阅读 · 0 评论 -
P1616 疯狂的采药
题目背景此题为NOIP2005普及组第三题的疯狂版。此题为纪念LiYuxiang而生。题目描述LiYuxiang是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同种类的草药,采每一种都需要一些时间,每一种也有它自身的价值。我会给你一...原创 2019-05-20 19:07:28 · 201 阅读 · 0 评论 -
n 皇后问题
n皇后问题研究的是如何将n个皇后放置在n×n的棋盘上,并且使皇后彼此之间不能相互攻击。给定一个整数n,返回所有不同的n皇后问题的解决方案。每一种解法包含一个明确的n皇后问题的棋子放置方案,该方案中'Q'和'.'分别代表了皇后和空位。class Solution {public: void fun(vector<vector<...原创 2019-04-03 15:08:00 · 125 阅读 · 0 评论 -
68. 文本左右对齐
68. 文本左右对齐给定一个单词数组和一个长度maxWidth,重新排版单词,使其成为每行恰好有maxWidth个字符,且左右两端对齐的文本。你应该使用“贪心算法”来放置给定的单词;也就是说,尽可能多地往每行中放置单词。必要时可用空格' '填充,使得每行恰好有maxWidth个字符。要求尽可能均匀分配单词间的空格数量。如果某一行单词间的空格不能均匀分配,则左侧放置的空格数...原创 2019-04-03 15:06:10 · 148 阅读 · 0 评论 -
LCA算法
Tarjan算法不论咱们所面对的二叉树是二叉查找树,或不是二叉查找树,都可以把求任意两个结点的最近公共祖先,当做是查询的问题,如果是只求一次,则是单次查询;如果要求多个任意两个结点的最近公共祖先,则相当于是批量查询。涉及到批量查询的时候,咱们可以借鉴离线处理的方式,这就引出了解决此LCA问题的Tarjan离线算法。2.1、什么是Tarjan算法Tarjan算法 (以发现者Rober...原创 2019-04-12 09:28:30 · 2235 阅读 · 0 评论 -
数字图像处理-车牌定位
[摘要] 在车牌识别系统中,最重要的内容之一就是车牌定位。本文采用了数字图像处理技术,使用python+opencv及常用的数字图像处理方法对各种情况下的车牌进行定位,主要采用了HSV空间的颜色分割和边缘检测及轮廓检测方法,实验结果表明采用的方法及设计的系统都是非常有效的。关键词:opencv 车牌定位 python 概述随着经济的快速发展,人们生活水平日益提高,汽车也变得越来...原创 2019-01-24 15:20:40 · 3847 阅读 · 0 评论 -
BCNF的保持无损连接的分解
BCNF 的分解是数据库范式的内容分解的算法是这样的将关系模式R<U,F>分解为一个BCNF的基本步骤是1).检查R中关系模式是否符合BCNF,若都符合输出即可2)若R中有关系模式S不符合BCNF,则必有X->A的闭包不包含S的全部属性,把S分为{S1,S2},其中S1=XA,S2=(S-A)X,分别计算其最小函数依赖集,并将{S1,S2}代替S代入第一步中。...原创 2018-10-30 20:43:58 · 11889 阅读 · 3 评论 -
函数依赖属性集闭包的算法
F 的闭包:在关系模式 R<U , F> 中为 F 所逻辑蕴含的函数依赖的全体叫作 F 的闭包,记为 F + 。属性集 X 关于函数依赖集 F 的闭包:设 F 为属性集 U 上的一组函数依赖, X Í U , XF + ={ A|X → A 能由 F 根据 Armstrong 公理导出 } , XF + 称为属性集 X 关于函数依赖集 F 的闭包.算法 求属性集 X (...原创 2018-10-31 22:04:20 · 4235 阅读 · 1 评论 -
二叉搜索树
二叉查找树(英语:Binary Search Tree),也称为二叉搜索树、有序二叉树(ordered binary tree)或排序二叉树(sorted binary tree),是指一棵空树或者具有下列性质的二叉树:若任意节点的左子树不空,则左子树上所有节点的值均小于它的根节点的值; 若任意节点的右子树不空,则右子树上所有节点的值均大于它的根节点的值; 任意节点的左、右子树也分别为二叉...原创 2018-07-23 00:20:46 · 130 阅读 · 0 评论 -
堆排序
堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。堆分为大根堆和小根堆,是完全二叉树。大根堆的要求是每个节点的值都不大于其父节点的值,即A[PARENT[i]] >= A[i]。在数组的非降序排序中,需要使用的就是大根堆,因为根据大根堆的要求可知,最大的值一定在堆顶。大根堆排序算法的基本操作:...原创 2018-07-22 20:06:45 · 146 阅读 · 0 评论 -
基于堆的优先队列
普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。优先队列具有最高级先出 (first in, largest out)的行为特征。通常采用堆数据结构来实现。先来看一下堆的概念,堆是二叉堆的简称,是一种每个节点的元素都大于两个子节点的完全二叉树,在优先队列中一般用数组表示。#include&l...原创 2018-07-22 10:09:31 · 297 阅读 · 0 评论 -
快速排序
设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。值得注意的是,快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动。一趟快速排序的算法是:1)设置两个变量i、j,排序开始的时候:i=0,j=N-1;2)以第一...原创 2018-07-22 00:15:30 · 122 阅读 · 0 评论 -
归并排序
归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。归并操作的工作原理如下:第一步:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列第二步...原创 2018-07-21 23:46:59 · 109 阅读 · 0 评论 -
希尔排序实现
希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。 希尔排序是非稳定排序算法。 希尔排序是基于插入排序的以下两点性质而提出改进方法的: 插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率#include<iostream>using namespace std;void shell_sort(int a[], int n){ int ...原创 2018-07-21 11:29:01 · 1346 阅读 · 0 评论