
算法竞赛进阶指南笔记
WMXNLFD
努力成瘾的人
个人博客:https://www.cnblogs.com/wmxnlfd/
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
《算法竞赛进阶指南》5.1线性DP
271. 杨老师的照相排列 有 N 个学生合影,站成左端对齐的 k 排,每排分别有 N1,N2,…,Nk 个人。 (N1≥N2≥…≥Nk) 第1排站在最后边,第 k 排站在最前边。 学生的身高互不相同,把他们从高到底依次标记为 1,2,…,N。 在合影时要求每一排从左到右身高递减,每一列从后到前身高也递减。 问一共有多少种安排合影位置的方案? 下面的一排三角矩阵给出了当 N=6,k=3,N1=3,...原创 2019-11-04 21:17:39 · 351 阅读 · 0 评论 -
《算法竞赛进阶指南》1.2队列
132. 小组队列 有n个小组要排成一个队列,每个小组中有若干人。 当一个人来到队列时,如果队列中已经有了自己小组的成员,他就直接插队排在自己小组成员的后面,否则就站在队伍的最后面。 请你编写一个程序,模拟这种小组队列。 输入格式: 输入将包含一个或多个测试用例。 对于每个测试用例,第一行输入小组数量t。 接下来t行,每行输入一个小组描述,第一个数表示这个小组的人数,接下来的数表示这个小组的人的编...原创 2019-05-17 14:47:37 · 1954 阅读 · 0 评论 -
《算法竞赛进阶指南》1.8总结与练习(1)
150. 括号画家 达达是一名漫画家,她有一个奇特的爱好,就是在纸上画括号。 这一天,刚刚起床的达达画了一排括号序列,其中包含小括号( )、中括号[ ]和大括号{ },总长度为N。 这排随意绘制的括号序列显得杂乱无章,于是达达定义了什么样的括号序列是美观的: (1) 空的括号序列是美观的; (2) 若括号序列A是美观的,则括号序列 (A)、[A]、{A} 也是美观的; (3) 若括号序列A、B都是...原创 2019-05-17 14:55:40 · 376 阅读 · 0 评论 -
《算法竞赛进阶指南》2.2深度优先搜索
165. 小猫爬山 翰翰和达达饲养了N只小猫,这天,小猫们要去爬山。 经历了千辛万苦,小猫们终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了(呜咕>_<)。 翰翰和达达只好花钱让它们坐索道下山。 索道上的缆车最大承重量为W,而N只小猫的重量分别是C1、C2……CN。 当然,每辆缆车上的小猫的重量之和不能超过W。 每租用一辆缆车,翰翰和达达就要付1美元,所以他们想知道,最少需要付多少美...原创 2019-05-27 14:21:22 · 283 阅读 · 0 评论 -
《算法竞赛进阶指南》1.8总结与练习(2)
154. 滑动窗口 给定一个大小为n≤10^6的数组。 有一个大小为k的滑动窗口,它从数组的最左边移动到最右边。 您只能在窗口中看到k个数字。 每次滑动窗口向右移动一个位置。 以下是一个例子: 该数组为[1 3 -1 -3 5 3 6 7],k为3。 窗口位置 最小值 最大值 [1 3 -1] -3 5 3 6 7 -1 -3 1 [3 -1 -3] 5 3 6 7 -3 ...原创 2019-05-18 11:17:33 · 555 阅读 · 0 评论 -
《算法竞赛进阶指南》3.1质数
196. 质数距离 给定两个整数L和U,你需要在闭区间[L,U]内找到距离最接近的两个相邻质数C1和C2(即C2-C1是最小的),如果存在相同距离的其他相邻质数对,则输出第一对。 同时,你还需要找到距离最远的两个相邻质数D1和D2(即D1-D2是最大的),如果存在相同距离的其他相邻质数对,则输出第一对。 输入格式 每行输入两个整数L和U,其中L和U的差值不会超过1000000。 输出格式 对于每个...原创 2019-06-09 14:37:30 · 252 阅读 · 0 评论 -
《算法竞赛进阶指南》2.3剪枝
167. 木棒 乔治拿来一组等长的木棒,将它们随机地砍断,使得每一节木棍的长度都不超过50个长度单位。 然后他又想把这些木棍恢复到为裁截前的状态,但忘记了初始时有多少木棒以及木棒的初始长度。 请你设计一个程序,帮助乔治计算木棒的可能最小长度。 每一节木棍的长度都用大于零的整数表示。 注意: 数据中可能包含长度大于50的木棒,请在处理时忽略这些木棒。 输入格式 输入包含多组数据,每组数据包括两行。 ...原创 2019-06-27 13:46:15 · 510 阅读 · 0 评论 -
《算法竞赛进阶指南》2.4迭代加深
170. 加成序列 满足如下条件的序列X(序列中元素被标号为1、2、3…m)被称为“加成序列”: 1、X[1]=1 2、X[m]=n 3、X[1]<X[2]<…<X[m-1]<X[m] 4、对于每个 k(2≤k≤m)都存在两个整数 i 和 j (1≤i,j≤k−1,i 和 j可相等),使得X[k]=X[i]+X[j]。 你的任务是:给定一个整数n,找出符合上述条件的长度m最...原创 2019-06-27 21:30:12 · 303 阅读 · 0 评论 -
《算法竞赛进阶指南》2.5广度优先搜索
172. 立体推箱子 立体推箱子是一个风靡世界的小游戏。 游戏地图是一个N行M列的矩阵,每个位置可能是硬地(用”.”表示)、易碎地面(用”E”表示)、禁地(用”#”表示)、起点(用”X”表示)或终点(用”O”表示)。 你的任务是操作一个1×1×2的长方体。 这个长方体在地面上有两种放置形式,“立”在地面上(1×1的面接触地面)或者“躺”在地面上(1×2的面接触地面)。 在每一步操作中,可以按上下左...原创 2019-07-25 21:05:27 · 397 阅读 · 0 评论 -
《算法竞赛进阶指南》2.6广搜变形
175. 电路维修 达达是来自异世界的魔女,她在漫无目的地四处漂流的时候,遇到了善良的少女翰翰,从而被收留在地球上。 翰翰的家里有一辆飞行车。 有一天飞行车的电路板突然出现了故障,导致无法启动。 电路板的整体结构是一个R行C列的网格(R,C≤500),如下图所示。 每个格点都是电线的接点,每个格子都包含一个电子元件。 电子元件的主要部分是一个可旋转的、连接一条对角线上的两个接点的短电缆。 在旋转...原创 2019-08-11 16:18:37 · 452 阅读 · 0 评论 -
《算法竞赛进阶指南》2.8IDAstar
IDA* 迭代加深版的A*算法 设计一个估计函数f(state)<= 真实步数 迭代加深基本框架: depth = 0 while(!def(0, depth)) depth ++; bool dfs() { if(now_depth + f() > max_depth) return false; } 180. 排书 给定n本书,编号为1-n。 在初始状态下,书是任意排列的。...原创 2019-08-24 15:58:37 · 675 阅读 · 0 评论 -
《算法竞赛进阶指南》2.7Astar
178. 第K短路 给定一张N个点(编号1,2…N),M条边的有向图,求从起点S到终点T的第K短路的长度,路径允许重复经过点或边。 注意: 每条最短路中至少要包含一条边。 输入格式 第一行包含两个整数N和M。 接下来M行,每行包含三个整数A,B和L,表示点A与点B之间存在有向边,且边长为L。 最后一行包含三个整数S,T和K,分别表示起点S,终点T和第K短路。 输出格式 输出占一行,包含一个整数,表...原创 2019-08-12 19:54:10 · 258 阅读 · 0 评论 -
《算法竞赛进阶指南》2.9总结与练习(1)
183. 靶形数独 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低。 但普通的数独对他们来说都过于简单了,于是他们向Z博士请教,Z博士拿出了他最近发明的“靶形数独”,作为这两个孩子比试的题目。 靶形数独的方格同普通数独一样,在9×9的大九宫格中有9个3×3的小九宫格(用粗黑色线隔开的)。 在这个大九宫格中,有一些数字是已知的,根据这些数字,利用逻辑...原创 2019-09-03 22:02:44 · 261 阅读 · 0 评论 -
《算法竞赛进阶指南》2.9总结与练习(2)
185. 玛雅游戏 玛雅难题是最近流行起来的一个游戏。 游戏界面是一个 7 行 5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上。 游戏通关是指在规定的步数内消除所有的方块,消除方块的规则如下: 1、每步移动可以且仅可以沿横向(即向左或向右)拖动某一方块一格:当拖动这一方块时,如果拖动后到达的位置(以下称目标位置)也有方块,那么这两个方块将交换位置...原创 2019-09-05 21:21:50 · 442 阅读 · 0 评论 -
《算法竞赛进阶指南》1.7二叉堆
145. 超市 超市里有N件商品,每个商品都有利润pi和过期时间di,每天只能卖一件商品,过期商品(即当天di<=0)不能再卖。 求合理安排每天卖的商品的情况下,可以得到的最大收益是多少。 输入格式 输入包含多组测试用例。 每组测试用例,以输入整数N开始,接下里输入N对pi和di,分别代表第i件商品的利润和过期时间。 在输入中,数据之间可以自由穿插任意个空格或空行,输入至文件结尾时终止输入,...原创 2019-05-17 14:38:43 · 716 阅读 · 0 评论 -
《算法竞赛进阶指南》1.1栈
41. 包含min函数的栈 设计一个支持push,pop,top等操作并且可以在O(1)时间内检索出最小元素的堆栈。 push(x)–将元素x插入栈中 pop()–移除栈顶元素 top()–得到栈顶元素 getMin()–得到栈中最小元素 样例 MinStack minStack = new MinStack(); minStack.push(-1); minStack.push(3); minS...原创 2019-05-13 13:56:11 · 261 阅读 · 0 评论 -
《算法竞赛进阶指南》1.6Trie
142. 前缀统计 给定N个字符串S1,S2…SN,接下来进行M次询问,每次询问给定一个字符串T,求S1~SN中有多少个字符串是T的前缀。 输入字符串的总长度不超过106,仅包含小写字母。 输入格式 第一行输入两个整数N,M。 接下来N行每行输入一个字符串Si。 接下来M行每行一个字符串T用以询问。 输出格式 对于每个询问,输出一个整数表示答案。 每个答案占一行。 输入样例: 3 2 ab bc ...原创 2019-05-17 09:13:48 · 326 阅读 · 0 评论 -
《算法竞赛进阶指南》0.5排序
103. 电影 莫斯科正在举办一个大型国际会议,有n个来自不同国家的科学家参会。 每个科学家都只懂得一种语言。 为了方便起见,我们把世界上的所有语言用1到109之间的整数编号。 在会议结束后,所有的科学家决定一起去看场电影放松一下。 他们去的电影院里一共有m部电影正在上映,每部电影的语音和字幕都采用不同的语言。 对于观影的科学家来说,如果能听懂电影的语音,他就会很开心;如果能看懂字幕,他就会比较开...原创 2019-05-02 18:53:16 · 640 阅读 · 0 评论 -
《算法竞赛进阶指南》0.6倍增
109. 天才ACM 给定一个整数 M,对于任意一个整数集合 S,定义“校验值”如下: 从集合 S中取出 M 对数(即 2∗M 个数,不能重复使用集合中的数,如果 S 中的整数不够 M 对,则取到不能取为止),使得“每对数的差的平方”之和最大,这个最大值就称为集合 S的“校验值”。 现在给定一个长度为 N的数列 A 以及一个整数 T。 我们要把 A分成若干段,使得每一段的“校验值”都不超过 T。 ...原创 2019-05-03 17:49:58 · 214 阅读 · 0 评论 -
《算法竞赛进阶指南》0.1位运算
89.a^b 求 a 的 b 次方对 p取模的值。 输入格式 三个整数 a,b,p,在同一行用空格隔开。 输出格式 输出一个整数,表示a^b mod p的值。 数据范围 1≤a,b,p≤109 输入样例: 3 2 7 输出样例: 2 #include<iostream> using namespace std; //考察快速幂 int main() { int a, b, p;...原创 2019-04-24 13:51:35 · 218 阅读 · 0 评论 -
《算法竞赛进阶指南》0.3前缀与差分
99. 激光炸弹 一种新型的激光炸弹,可以摧毁一个边长为 R的正方形内的所有的目标。 现在地图上有 N个目标,用整数Xi,Yi表示目标在地图上的位置,每个目标都有一个价值Wi。 激光炸弹的投放是通过卫星定位的,但其有一个缺点,就是其爆炸范围,即那个边长为 R 的正方形的边必须和x,y轴平行。 若目标位于爆破正方形的边上,该目标不会被摧毁。 求一颗炸弹最多能炸掉地图上总价值为多少的目标。 输入格式 ...原创 2019-04-29 17:35:53 · 139 阅读 · 0 评论 -
《算法竞赛进阶指南》0.7贪心
110. 防晒 有C头奶牛进行日光浴,第i头奶牛需要minSPF[i]到maxSPF[i]单位强度之间的阳光。 每头奶牛在日光浴前必须涂防晒霜,防晒霜有L种,涂上第i种之后,身体接收到的阳光强度就会稳定为SPF[i],第i种防晒霜有cover[i]瓶。 求最多可以满足多少头奶牛进行日光浴。 输入格式 第一行输入整数C和L。 接下来的C行,按次序每行输入一头牛的minSPF和maxSPF值,即第i行...原创 2019-05-05 16:13:13 · 377 阅读 · 0 评论 -
《算法竞赛进阶指南》0.8总结与练习(1)
116. 飞行员兄弟 “飞行员兄弟”这个游戏,需要玩家顺利的打开一个拥有16个把手的冰箱。 已知每个把手可以处于以下两种状态之一:打开或关闭。 只有当所有把手都打开时,冰箱才会打开。 把手可以表示为一个4х4的矩阵,您可以改变任何一个位置[i,j]上把手的状态。 但是,这也会使得第i行和第j列上的所有把手的状态也随着改变。 请你求出打开冰箱所需的切换把手的次数最小值是多少。 输入格式 输入一共包含...原创 2019-05-08 18:52:21 · 344 阅读 · 0 评论 -
《算法竞赛进阶指南》0.4二分
102. 最佳牛围栏 农夫约翰的农场由N块田地组成,每块地里都有一定数量的牛,其数量不会少于1头,也不会超过2000头。 约翰希望用围栏将一部分连续的田地围起来,并使得围起来的区域内每块地包含的牛的数量的平均值达到最大。 围起区域内至少需要包含 F块地,其中 F会在输入中给出。 在给定条件下,计算围起区域内每块地包含的牛的数量的平均值可能的最大值是多少。 输入格式 第一行输入整数 N和 F,数据间...原创 2019-05-01 17:57:45 · 240 阅读 · 0 评论 -
《算法竞赛进阶指南》1.3链表
136. 邻值查找 给定一个长度为 n 的序列 A,A 中的数各不相同。对于 A 中的每一个数 Ai,求: min 1≤j<i |Ai−Aj| 以及令上式取到最小值的 j(记为 Pi)。若最小值点不唯一,则选择使 Aj较小的那个。 输入格式 第一行输入整数n,代表序列长度。 第二行输入n个整数A1…An,代表序列的具体数值,数值之间用空格隔开。 输出格式 输出共n-1行,每行输出两个整数,数...原创 2019-05-14 14:27:44 · 273 阅读 · 0 评论 -
《算法竞赛进阶指南》1.8总结与练习(3)
158. 项链 有一天,达达捡了一条价值连城的宝石项链,但是,一个严重的问题是,他并不知道项链的主人是谁! 在得知此事后,很多人向达达发来了很多邮件,都说项链是自己的,要求他归还(显然其中最多只有一个人说了真话)。 达达要求每个人都写了一段关于自己项链的描述: 项链上的宝石用数字0至9来标示。 一个对于项链的表示就是从项链的某个宝石开始,顺指针绕一圈,沿途记下经过的宝石,比如项链: 0-1-2-3...原创 2019-05-19 13:32:02 · 535 阅读 · 0 评论 -
《算法竞赛进阶指南》2.1树与图的遍历
164. 可达性统计 给定一张N个点M条边的有向无环图,分别统计从每个点出发能够到达的点的数量。 输入格式 第一行两个整数N,M,接下来M行每行两个整数x,y,表示从x到y的一条有向边。 输出格式 输出共N行,表示每个点能够到达的点的数量。 数据范围 1≤N,M≤30000 输入样例: 10 10 3 8 2 3 2 5 5 9 5 9 2 3 3 9 4 8 2 10 4 9 输出样例: 1 6...原创 2019-05-19 15:07:21 · 208 阅读 · 0 评论 -
《算法竞赛进阶指南》0.8总结与练习(2)
122. 糖果传递 有n个小朋友坐成一圈,每人有a[i]个糖果。 每人只能给左右两人传递糖果。 每人每次传递一个糖果代价为1。 求使所有人获得均等糖果的最小代价。 输入格式 第一行输入一个正整数n,表示小朋友的个数。 接下来n行,每行一个整数a[i],表示第i个小朋友初始得到的糖果的颗数。 输出格式 输出一个整数,表示最小代价。 数据范围 1≤n≤1000000 输入样例: 4 1 2 5 4 输...原创 2019-05-10 15:25:17 · 318 阅读 · 0 评论 -
《算法竞赛进阶指南》1.4Hash
137. 雪花雪花雪花 有N片雪花,每片雪花由六个角组成,每个角都有长度。 第i片雪花六个角的长度从某个角开始顺时针依次记为ai,1,ai,2,…,ai,6。 因为雪花的形状是封闭的环形,所以从任何一个角开始顺时针或逆时针往后记录长度,得到的六元组都代表形状相同的雪花。 例如ai,1,ai,2,…,ai,6和ai,2,ai,3,…,ai,6,ai,1 就是形状相同的雪花。 ai,1,ai,2,…,...原创 2019-05-15 14:20:31 · 315 阅读 · 0 评论 -
《算法竞赛进阶指南》1.5字符串
141. 周期 一个字符串的前缀是从第一个字符开始的连续若干个字符,例如”abaab”共有5个前缀,分别是a, ab, aba, abaa, abaab。 我们希望知道一个N位字符串S的前缀是否具有循环节。 换言之,对于每一个从头开始的长度为 i (i>1)的前缀,是否由重复出现的子串A组成,即 AAA…A (A重复出现K次,K>1)。 如果存在,请找出最短的循环节对应的K值(也就是这...原创 2019-05-16 10:23:01 · 174 阅读 · 0 评论 -
《算法竞赛进阶指南》0.2递推与递归
92. 递归实现指数型枚举 从 1~n 这 n 个整数中随机选取任意多个,输出所有可能的选择方案。 输入格式 输入一个整数n。 输出格式 每行输出一种方案。 同一行内的数必须升序排列,相邻两个数用恰好1个空格隔开。 对于没有选任何数的方案,输出空行。 本题有自定义校验器(SPJ),各行(不同方案)之间的顺序任意。 数据范围 1≤n≤15 输入样例: 3 输出样例: 3 2 2 3 1 1 3 1 ...原创 2019-04-27 20:29:48 · 340 阅读 · 0 评论