算法
文章平均质量分 80
算法
闲狗
没有道理去限制女孩子必须干什么,应该从事什么。她们的生活,她们对于梦想的追逐应该是百花齐放的。
展开
-
算法十九:刷油漆
描述有n辆车排成一排,还有m种不同颜色的油漆,其中第i种油漆够涂ai辆车,同时所有油漆恰好能涂完n辆车。若任意两辆相邻的车颜色不能相同,有多少种涂油漆的方案?输入第一行包含一个正整数m。接下来一行包含m个正整数,第i个正整数表示ai。输出输出一个整数,表示答案除以23333的余数。样例输入32 1 3样例输出10样例解释10个方案分别是:...原创 2018-07-03 14:52:42 · 2029 阅读 · 0 评论 -
算法二十一:最长公共子序列
问题描述给定两个 1 到 n 的排列 A,B (即长度为 n 的序列,其中 [1,n] 之间的所有数都出现了恰好一次)。求它们的最长公共子序列长度。输入格式第一行一个整数 n ,意义见题目描述。第二行 n 个用空格隔开的正整数 A[1],…,A[n],描述排列 A。第三行 n 个用空格隔开的正整数 B[1],…,B[n],描述排列 B。输出格式一行一个整数,表示 A...原创 2018-07-03 15:11:19 · 1468 阅读 · 0 评论 -
算法二十二:倒水问题
问题描述邓老师有有 2 个容量分别为 n 单位、m 单位的没有刻度的杯子。初始,它们都是空的。邓老师给了你 t 分钟时间。每一分钟,他都可以做下面 4 件事中的任意一件:用水龙头装满一个杯子。 倒空一个杯子。 把一个杯子里的水倒到另一个杯子里,直到一个杯子空了或者另一个杯子满了。 什么都不做。邓老师希望最后能获得 d 个单位的水,假设最后两个杯具中水量的总和为 x,那么邓老师的...原创 2018-07-03 15:17:37 · 10280 阅读 · 5 评论 -
算法二十三:奶牛吃草
问题描述有一只奶牛在一条笔直的道路上(可以看做是一个数轴)。初始,它在道路上坐标为 K 的地方。这条道路上有 n 棵非常新鲜的青草(编号从 1 开始)。其中第 i 棵青草位于道路上坐标为 x[i] 的地方。贝西每秒钟可以沿着道路的方向向前(坐标加)或向后(坐标减)移动一个坐标单位的距离。它只要移动到青草所在的地方,就可以一口吞掉青草,它的食速很快,吃草的时间可以不计。它要吃光所有的...原创 2018-07-03 15:21:56 · 2634 阅读 · 0 评论 -
算法二十五:回文串
描述给定一个字符串,求出该字符串有多少子串是回文串。子串:字符串中连续的一段。比如字符串abcd里,bc、abc、a、bcd都是子串。回文串:字符串倒序写出来和该字符串相同。比如aba,倒序写出来也是aba,故aba是回文串。而abab不是回文串,因为倒过来写是baba。输入输入一个字符串。输出输出子串是回文串的个数。样例1输入abab样例1输出6...原创 2018-07-03 15:32:44 · 970 阅读 · 0 评论 -
算法二十九:最大间隙
问题描述给定长度为 n 的数组 a,其中每个元素都为 [0,2^k) 之间的整数,请求出它们在实数轴上相邻两个数之间的最大值(即maxGap)。由于 n 可能很大,为了避免过大的输入、输出规模,我们会在程序内部生成数据,并要求你输出排序后序列的哈希值。具体方法如下(用c++代码展示):typedef unsigned int u32;u32 nextInt(u32 x){ ...原创 2018-07-04 11:20:42 · 2371 阅读 · 0 评论 -
算法二十八:前缀
描述给定n个字符串,再询问m次,每个询问给出一个字符串,求出这个字符串是n个字符串里,多少个串的前缀。前缀:从头开始的一段连续子串。比如字符串ab是字符串abcd的前缀,也是字符串ab(自身)的前缀,但不是bab的前缀。输入第一行包含两个正整数n,m。接下来n行,每行表示一个字符串,表示给定的n个字符串中的一个。再接下来m行,每行一个字符串,表示询问的字符串。输出输...原创 2018-07-04 11:14:58 · 2089 阅读 · 0 评论 -
算法三十:基数排序
问题描述给定 n 个 [0,2^k) 之间的整数,请你将它们升序排序。由于 n 可能很大,为了避免过大的输入、输出规模,我们会在程序内部生成数据,并要求你输出排序后序列的哈希值。具体方法如下(用c++代码展示):typedef unsigned int u32;u32 nextInt(u32 x){ x^=x<<13; x^=x>>17; x^=...原创 2018-07-04 11:28:13 · 1428 阅读 · 0 评论 -
算法三十二:凸包
描述给定n个二维平面上的点,求他们的凸包。输入第一行包含一个正整数n。接下来n行,每行包含两个整数x,y,表示一个点的坐标。输出令所有在凸包极边上的点依次为p1,p2,...,pm(序号),其中m表示点的个数,请输出以下整数:(p1 × p2 × ... × pm × m) mod (n + 1)样例输入107 9-8 -1-3 -11 4-3 9...原创 2018-07-04 12:44:59 · 1748 阅读 · 0 评论 -
算法三十三:图
描述一个数列 a 称为合法的当且仅对于所有的位置 i, j(i < j ≤ n),都不存在一条从 aj 点连向 ai 的有向边。现在有很多个有向无环图,请你判断每个图是否只存在唯一的合法数列。输入输入的第一行包含一个正整数 T ,表示数据组数。对于每组数据,第一行包含两个正整数 n, m,表示图的节点个数和边数。接下来 m 行,每行包含两个正整数 x, y(x, y ≤ ...原创 2018-07-04 12:49:18 · 846 阅读 · 0 评论 -
算法五:重编码
问题描述有一篇文章,文章包含 n 种单词,单词的编号从 1 至 n,第 i 种单词的出现次数为 w[i]。现在,我们要用一个 2 进制串(即只包含 0 或 1 的串) s[i] 来替换第 i 种单词,使其满足如下要求:对于任意的 1≤i,j≤n(i≤j),都有 s[i] 不是 s[j] 的前缀。(这个要求是为了避免二义性)你的任务是对每个单词选择合适的 s[i],使得替换后的文章总长度(定义为所有...原创 2018-05-21 22:20:00 · 1843 阅读 · 0 评论 -
算法十一:大转盘
问题描述邓老师有一个大转盘,被平分成了 2^n 份。邓老师还有一个长度为 2^n 的数组 a(下标从 0 开始),其中的每个元素都是 0 或 1。于是邓老师就可以选择大转盘上的一个位置,将 a[0] 填入其中,然后按顺时针顺序依次将 a[1],a[2],…,a[2^n-1] 填入。对于大转盘上的一个指定位置,邓老师可以从它开始,取出顺时针方向的 n 个位置,并将它们按原顺序拼接起来,得...原创 2018-05-25 21:59:35 · 3681 阅读 · 0 评论 -
算法二十:n皇后
描述n皇后问题:一个n×n的棋盘,在棋盘上摆n个皇后,满足任意两个皇后不能在同一行、同一列或同一斜线上的方案有多少种?输入第一行包含一个整数n。输出输出一个整数,表示方案数。样例1输入4样例1输出2提示[考察剪枝水平,剪枝剪得好(二进制剪枝)的才能过第10个测试点。]一. 伪代码二. 具体实现#include &...原创 2018-07-03 14:57:51 · 720 阅读 · 0 评论 -
算法二十七:子序列
描述给定一个字符串,求出该字符串有多少不同的子序列。子序列:字符串中按顺序抽出一些字符得到的串。比如字符串abcd里,ab、ac、ad、abc、acd都是子序列。输入输入一个字符串。输出输出不同的子序列的个数除以23333得到的余数。样例输入ababc样例输出23样例解释有这些子序列:a,b,c,aa,ab,ac,ba,bb,bc,aba...原创 2018-07-04 11:11:06 · 3154 阅读 · 0 评论 -
算法二十四:矩形
描述给定两个矩阵,判断第二个矩阵在第一个矩阵的哪些位置出现过。输入输入的第一行包含四个正整数a,b,c,d,表示第一个矩阵大小为a×b,第二个矩阵的大小为c×d。接下来是一个a×b的矩阵。再接下来是一个c×d的矩阵。保证矩阵中每个数字都为正整数且不超过100。输出若第二个矩阵在第一个矩阵的(i,j)位置出现(即出现位置的左上角),输出i和j。若有多个位置,按字典序从...原创 2018-07-03 15:29:31 · 3117 阅读 · 0 评论 -
算法三十一:字符串匹配
问题描述给定一个大串 A 和一个模式串 B,求 B 在 A 的哪些位置出现(输出这些出现位置的起始位置,下标从 0 开始)。输入格式第一行一个正整数 n,表示串 A 的长度。第二行包含一个长度为 n 的串 A。第三行一个正整数 m,表示串 B 的长度。第四行包含一个长度为 m 的串 B。保证串 A,B 只包含小写字母。输出格式对于每个 B 在 A 中出现的位置,...原创 2018-07-04 12:37:18 · 907 阅读 · 0 评论 -
算法十七:背包问题1
描述n种物品,每种物品有相应的价值和体积,同时物品还分为两类,一类是“单个物品”,即该种物品只有一个;一类是“多个物品”,即该种物品有无限个。现在你有一个体积为V的背包,那么该装些什么物品到背包里使得价值之和最大呢?输入第一行包含两个正整数n,V。接下来n行,每行代表一种物品。每行的第一个数字表示该物品的种类(若为0表示“单个物品”,若为1表示“多个物品”),第二个数字表示该物...原创 2018-07-03 14:21:33 · 1643 阅读 · 0 评论 -
算法十六:数字三角形
时间限制:2 sec空间限制:256 MB问题描述给定一个高度为 n 的“数字三角形”,其中第 i 行(1<=i<=n)有 i 个数。(例子如下图所示)初始时,你站在“数字三角形”的顶部,即第一行的唯一一个数上。每次移动,你可以选择移动到当前位置正下方或者当前位置右下方的位置上。即如果你在 (i,j)(表示你在第i行从左往右数第j个数上,下同),你可以选择移动到 (...原创 2018-07-03 14:11:39 · 5685 阅读 · 0 评论 -
算法十八:背包问题2
描述n个物品,每个物品有一个体积v和价值w。现在你要回答,把一个物品丢弃后,剩下的物品装进一个大小为V的背包里能得到的最大价值是多少。输入输入的第一行包含一个正整数n(n ≤ 5000)。接下来n行,每行包含两个正整数v和w(v,w ≤ 5000),分别表示一个物品的体积和价值。接下来一行包含一个正整数q(q ≤ 5000),表示询问个数。接下来q行,每行包含两个正整数V和...原创 2018-07-03 14:46:38 · 2086 阅读 · 0 评论 -
算法二十六:邓老师数
问题描述众所周知,大于 1 的自然数中,除了 1 与其本身外不再有其他因数的数称作质数(素数)。对于大于 1 的不是质数的自然数,我们又称作合数。参加了邓老师算法训练营的小 Z 突发奇想,定义了新的数:所有合数中,除了 1 与其本身外,其他因数均为质数的数,称作邓老师数。现在,小 Z 给定两个数 n,k,其中 k 的取值为 0 或 1。如果 k=0,小 Z 希望你告诉他所有不超过...原创 2018-07-04 10:55:11 · 1206 阅读 · 0 评论 -
算法三:成绩排序
问题描述有 n 名学生,它们的学号分别是 1,2,…,n。这些学生都选修了邓老师的算法训练营、数据结构训练营这两门课程。学期结束了,所有学生的课程总评都已公布,所有总评分数都是 [0,100] 之间的整数。巧合的是,不存在两位同学,他们这两门课的成绩都完全相同。邓老师希望将这些所有的学生按这两门课程的总分进行降序排序,特别地,如果两位同学的总分相同,那邓老师希望把算法训练营得分更高的同学排在前面。...原创 2018-05-22 18:37:25 · 4768 阅读 · 1 评论 -
算法十五:序列计数
描述给定一个n个整数的序列以及一个非负整数d,请你输出这个序列中有多少个连续子序列(长度大于1),满足该子序列的最大值最小值之差不大于d。连续子序列:序列1 2 3中长度大于1的连续子序列有:1 22 31 2 3输入第一行包含两个整数n,d。接下来一行包含n个整数。输出输出一个整数,表示满足条件的连续子序列个数。样例1输入8 55 5 4 8 -10 10 0 1样例1输出7样例1解...原创 2018-05-25 22:03:56 · 2554 阅读 · 0 评论 -
算法十四:象棋
描述你有足够多的象棋“车”,在一个n×n的棋盘上你能放多少个“车”呢?注意,所给棋盘上有些位置不能放任何东西。同时,某一行(列)最多只能存在一个“车”。输入第一行为一个正整数n。接下来n行,每行包含n个整数,若为0表示这个位置不能放“车”;若为1表示这个位置可以放“车”。输出输出一个整数,表示最多能放多少个“车”。样例输入51 0 0 0 00 0 0 0 0...原创 2018-05-25 22:02:49 · 2808 阅读 · 0 评论 -
算法十三:最短路
时间限制:1 sec空间限制:256 MB问题描述给定一张 n 个点的无向带权图,节点的编号从 1 至 n,求从 S 到 T 的最短路径长度。输入格式第一行 4 个数 n,m,S, T,分别表示点数、边数、起点、终点。接下来 m 行,每行 3 个正整数 u,v,w,描述一条 u 到 v 的双向边,边权为 w。保证 1<=u,v<=n。输出格式输出一行一个整数,表示 S 到 T 的最短路...原创 2018-05-25 22:01:51 · 1835 阅读 · 0 评论 -
算法十二:楼尔邦德
时间限制:2 sec空间限制:256 MB问题描述给定包含 n 个数的序列 A。再给出 Q 个询问,每个询问包含一个数 x,询问的是序列 A 中不小于 x 的最小整数是多少(无解输出-1)。输入格式第一行一个数 n,表示序列长度。第二行 n 个用空格隔开的正整数,描述序列中的每一个元素。保证这些元素都不会超过 10^9。第三行一个正整数 Q,表示询问个数。接下来 Q 行,每行一个正整数 x,描述一...原创 2018-05-25 22:01:03 · 1012 阅读 · 0 评论 -
算法十:最小交换
时间限制:1 sec空间限制:256 MB问题描述给定一个 1 到 n 的排列(即一个序列,其中 [1,n] 之间的正整数每个都出现了恰好 1 次)。你可以花 1 元钱交换两个相邻的数。现在,你希望把它们升序排序。求你完成这个目标最少需要花费多少元钱。输入格式第一行一个整数 n,表示排列长度。接下来一行 n 个用空格隔开的正整数,描述这个排列。输出格式输出一行一个非负整数,表示完成目标最少需要花多...原创 2018-05-25 21:58:10 · 2760 阅读 · 1 评论 -
算法四:数字盒子
问题描述你有一个盒子,你可以往里面放数,也可以从里面取出数。初始时,盒子是空的,你会依次做 Q 个操作,操作分为两类:插入操作:询问盒子中是否存在数 x,如果不存在则把数 x 丢到盒子里。 删除操作:询问盒子中是否存在数 x,如果存在则取出 x。对于每个操作,你需要输出是否成功插入或删除。输入第一行一个正整数 Q,表示操作个数。接下来 Q 行依次描述每个操作。每行 2 ...原创 2018-05-21 22:16:35 · 1857 阅读 · 0 评论 -
算法一:栈排序
问题描述给定一个序列 A,请你将它升序排序。输入格式第一行一个正整数 n,表示序列长度。第二行 n 个用空格隔开的非负整数,描述这个序列。输出格式n 行,每行一个非负整数,表示排序后的序列。样例输入41 3 2 10样例输出12310讲解伪代码我的程序:(省略输入输出)(C++实现)stack<int>...原创 2018-05-13 20:23:52 · 7416 阅读 · 1 评论 -
算法二:二叉排序树
描述给定一个1到n的排列,按顺序依次插入到一棵二叉排序树中,请你将这棵二叉树前序遍历和后序遍历输出。前序遍历的定义后序遍历的定义输入第一行一个整数n。接下来一行表示为n个整数,代表1到n的一个排列。输出输出所建成的二叉树的前序遍历和后序遍历。输入样例102 6 9 3 5 7 10 8 4 1输出样例2 1 6 3 5 4 9 7 8 101 4 5 3 8 7 10 9 6 2限制对于5...原创 2018-05-19 05:43:29 · 1702 阅读 · 0 评论 -
协同过滤算法学习笔记
(通过观看慕课网Hadoop进阶总结出来的笔记:http://www.imooc.com/learn/890)一. 余弦相似度其他的相似度种类1.切比雪夫距离 2.欧式距离 3.皮尔森系数 4.曼哈顿距离 5.杰卡德距离二. 基于物品的协同过滤算法ItemCF算法思想:给用户推荐那些和他们之前喜欢的物品相似的物品1.用户行为与权重例子:用户:A,B,C商品:1,2,3,4,5,6...原创 2018-04-16 11:07:03 · 486 阅读 · 0 评论 -
算法六:等式
描述有n个变量和m个“相等”或“不相等”的约束条件,请你判定是否存在一种赋值方案满足所有m个约束条件。输入第一行一个整数T,表示数据组数。接下来会有T组数据,对于每组数据:第一行是两个整数n,m,表示变量个数和约束条件的个数。接下来m行,每行三个整数a,b,e,表示第a个变量和第b个变量的关系:若e=0则表示第a个变量不等于第b个变量;若e=1则表示第a个变量等于第b个变量输出输出T行,第i行表示...原创 2018-05-22 21:34:21 · 1930 阅读 · 0 评论 -
算法七:道路升级
问题描述Z国有 n 个城市和 m 条双向道路,每条道路连接了两个不同的城市,保证所有城市之间都可以通过这些道路互达。每条道路都有一个载重量限制,这限制了通过这条道路的货车最大的载重量。道路的编号从 1 至 m 。巧合的是,所有道路的载重量限制恰好都与其编号相同。现在,要挑选出若干条道路,将它们升级成高速公路,并满足如下要求:所有城市之间都可以通过高速公路互达。对于任意两个城市 u,v 和足够聪明的...原创 2018-05-22 21:36:32 · 2913 阅读 · 0 评论 -
算法三十四:最近点对
描述给定n个二维平面上的点,求距离最近的一对点,输出他们的距离。输入第一行包含一个正整数n。接下来n行,每行包含两个整数x,y,表示一个点的坐标。输出输出距离最近的一对点的距离,保留两位小数。样例输入107 9-8 -1-3 -11 4-3 96 -47 56 6-6 100 8样例输出1.41样例解释距离最近的点为7...原创 2018-07-04 13:52:53 · 5304 阅读 · 0 评论 -
算法三十五:纸牌
问题描述小明有 2n 张纸牌,点数依次从1 到 2n。小明要和你玩一个游戏,这个游戏中,每个人都会分到 n 张卡牌。游戏一共分为 n 轮,每轮你们都要出一张牌,点数小者获胜。游戏开始了,你拿到了你的牌。你现在想知道,你最多(也就是运气最好的情况下)能够获胜几轮?输入格式第一行 1 个正整数 n。第 2 行到第 n+1 行每行一个正整数 a[i],表示你的第 i 张牌的点数。...原创 2018-07-04 13:54:54 · 1794 阅读 · 0 评论 -
算法三十六:青蛙
问题描述一个坐标轴上有 n 个荷叶,编号从 1 到 n。每片荷叶有一个坐标。有一只可爱的小青蛙,它任选一片荷叶作为起点,并选择一个方向(左或右)然后开始跳。第一次跳跃时,他没有任何限制。从第二次跳跃开始,受到魔法的影响,他每次跳跃的距离都必须不小于前一次跳跃的距离,且跳跃方向必须与上一次跳跃保持一致。每一片荷叶上都有一个数值。每次小青蛙跳到一片荷叶上时,他就会获得该荷叶对应的数值。特别...原创 2018-07-05 09:48:34 · 2613 阅读 · 0 评论 -
算法九:队列
描述实现一个队列,完成以下功能:入列出列询问队列中位置Y是谁一开始队列为空。队列中的位置从1开始(即队头位置为1)。输入第一行一个整数n,表示操作个数。接下来n行,每行第一个数字表示操作(见描述):若为数字1,则接下来有一串字符串X,表示将X加入队列。若为数字2,表示出列(保证队列非空),并输出出列的这个人。若为数字3,则接下来有一个整数Y,表示询问队列中位置Y是谁(保证位置Y合法),并输出名字。...原创 2018-05-24 15:04:45 · 558 阅读 · 0 评论 -
算法八:分组
描述有n个正整数排成一排,你要将这些数分成m份(同一份中的数字都是连续的,不能隔开),同时数字之和最大的那一份的数字之和尽量小。输入输入的第一行包含两个正整数n,m。接下来一行包含n个正整数。输出输出一个数,表示最优方案中,数字之和最大的那一份的数字之和。样例1输入5 22 1 2 2 3样例1输出5样例1解释若分成2和1、2、2、3,则最大的那一份是1+2+2+3=8;若分成2、1和2、2...原创 2018-05-23 17:15:25 · 4616 阅读 · 0 评论