![](https://img-blog.csdnimg.cn/20190918140213434.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法基础题
文章平均质量分 64
记录初学算法写的基础题
赴星辰大海
这个作者很懒,什么都没留下…
展开
-
Watering the field(并查集、Kruskal)
Description农民约翰想建立一个灌溉系统,给他的N (1 <= N<= 2000)块田送水。农田在一个二维平面上,第i块农田坐标为(xi , yi )(0 <= xi , yi<= 1000),在农田 i 和农田 j 自己铺设水管的费用是这两块农田的欧几里得距离的平方(xi−xj)^2 + (yi−yj)^2。农民约翰希望所有的农田之间都能通水,而且希望花费最少的钱。但是安装工人拒绝安装费用小于C的水管(1 <= C<=1,00原创 2020-09-20 11:47:39 · 324 阅读 · 0 评论 -
繁忙的都市(并查集、Kruskal)
Description城市C是一个非常繁忙的大都市,城市中的道路十分的拥挤,于是市长决定对其中的道路进行改造。城市C的道路是这样分布的:城市中有n个交叉路口,有些交叉路口之间有道路相连,两个交叉路口之间最多有一条道路相连接。这些道路是双向的,且把所有的交叉路口直接或间接的连接起来了。每条道路都有一个分值,分值越小表示这个道路越繁忙,越需要进行改造。但是市政府的资金有限,市长希望进行改造的道路越少越好,于是他提出下面的要求:1.改造的那些道路能够把所有的交叉路口直接或间接的连通起来。2.在满足要求1的情原创 2020-09-13 20:17:23 · 1324 阅读 · 1 评论 -
C/C++实现并查集disjoint_set的模板(带路径压缩优化)
并查集没有固定的写法,其可以由个人写法习惯或具体使用环境的不同而不同,意会此模板再内化自用即可。B站推荐学习视频//开始前必须初始化根节点数组parent和层数数组rankfor(int i=0;i<节点数;++i){ parent[i]=-1;//或parent[i]=i; rank[i]=0;}//实现并查集首先要实现查找根节点功能//为了便于表达,写成函数int find_root(int x){ int x_root=x;//如果不是用-1初始化parent这句不用写原创 2020-09-11 22:54:08 · 1043 阅读 · 0 评论 -
糖果(SPFA、判负环)
Description幼儿园里有 N 个小朋友,老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果。但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明不希望小红分到的糖果比他的多,于是在分配糖果的时候,老师需要满足小朋友们的 K 个要求。幼儿园的糖果总是有限的,老师想知道他至少需要准备多少个糖果,才能使得每个小朋友都能够分到糖果,并且满足小朋友们所有的要求。Input输入的第一行是两个整数 N,K。接下来 K 行,表示这些点需要满足的关系,每行 3 个数字,X,A,B。如果 X=1,原创 2020-09-08 12:52:23 · 759 阅读 · 0 评论 -
Telephone Lines(SPFA+多层图)
Description多年以后,笨笨长大了,成为了电话线布置师。由于地震使得某市的电话线全部损坏,笨笨是负责接到震中市的负责人。该市周围分布着N(1<=N<=1000)根据1……n顺序编号的废弃的电话线杆,任意两根线杆之间没有电话线连接,一共有p(1<=p<=10000)对电话杆可以拉电话线。其他的由于地震使得无法连接。第iii对电线杆的两个端点分别是ai,bi,它们的距离为li(1<=li<=1000000)。数据中每对(ai,bi)只出现一次。编号为1原创 2020-08-09 21:47:56 · 326 阅读 · 1 评论 -
最优贸易(SPFA+走反图)
DescriptionC国有n个大城市和m条道路,每条道路连接这n个城市中的某两个城市。任意两个城市之间最多只有一条道路直接相连。这m条道路中有一部分为单向通行的道路,一部分为双向通行的道路,双向通行的道路在统计条数时也计为1条。C国幅员辽阔,各地的资源分布情况各不相同,这就导致了同一种商品在不同城市的价格不一定相同。但是,同一种商品在同一个城市的买入价和卖出价始终是相同的。商人阿龙来到C国旅游。当他得知同一种商品在不同城市的价格可能会不同这一信息之后,便决定在旅游的同时,利用商品在不同城市中的差价赚原创 2020-08-08 21:31:13 · 289 阅读 · 0 评论 -
最短路计数(SPFA)
Description给出一个N个顶点M条边的无向无权图,顶点编号为1−N。问从顶点1开始,到其他每个点的最短路有几条。Input第一行包含2个正整数N,M,为图的顶点数与边数。接下来M行,每行2个正整数x,y,表示有一条顶点x连向顶点y的边,请注意可能有自环与重边。Output共N行,每行一个非负整数,第i行输出从顶点1到顶点i有多少条不同的最短路,由于答案有可能会很大,你只需要输出ans mod 100003后的结果即可。如果无法到达顶点i则输出0。**Sample Input 1 **原创 2020-08-06 11:49:10 · 1059 阅读 · 4 评论 -
切蛋糕(单调队列Monotone queue)
Description今天是小Z的生日,同学们为他带来了一块蛋糕。这块蛋糕是一个长方体,被用不同色彩分成了N个相同的小块,每小块都有对应的幸运值。小Z作为寿星,自然希望吃到的第一块蛋糕的幸运值总和最大,但小Z最多又只能吃M小块(M≤N)的蛋糕。吃东西自然就不想思考了,于是小Z把这个任务扔给了学OI的你,请你帮他从这N小块中找出连续的k块蛋糕(k≤M),使得其上的幸运值最大。Input第一行是两个整数N,M。分别代表共有N小块蛋糕,小Z最多只能吃M小块。第二行用空格隔开的N个整数,第i原创 2020-06-27 11:42:53 · 468 阅读 · 0 评论 -
正误问题(栈stack)
Descriptionuncle-lu迷上了逻辑值运算。但uncle-lu算的头都晕了,也没算出个所以然。他只好找到你,让你帮他解决这个问题。Input一个字符串(串长小于255)表达逻辑式子,内只包含true,false,or,and,not和空格,(不包含括号和xor),优先级同pascal.(not->and->or),同级左边先算,如果逻辑式有误则输出 error。Output运算结果:true 或者 false ,如果无法得到结果的输出errorSample I原创 2020-06-24 20:46:17 · 509 阅读 · 2 评论 -
奶酪(不用回溯:剪枝+深搜dfs)
Description现有一块大奶酪,它的高度为 hhh,它的长度和宽度我们可以认为是无限大的,奶酪 中间有许多 半径相同 的球形空洞。我们可以在这块奶酪中建立空间坐标系,在坐标系中, 奶酪的下表面为z=0,奶酪的上表面为z=h。现在,奶酪的下表面有一只小老鼠 Jerry,它知道奶酪中所有空洞的球心所在的坐 标。如果两个空洞相切或是相交,则 Jerry 可以从其中一个空洞跑到另一个空洞,特别 地,如果一个空洞与下表面相切或是相交,Jerry 则可以从奶酪下表面跑进空洞;如果 一个空洞与上表面相切或是相交原创 2020-05-14 17:12:58 · 437 阅读 · 0 评论 -
棋盘问题:有色可用魔法(不用回溯:剪枝+深搜dfs)
Description有一个m×m的棋盘,棋盘上每一个格子可能是红色、黄色或没有任何颜色的。你现在要从棋盘的最左上角走到棋盘的最右下角。任何一个时刻,你所站在的位置必须是有颜色的(不能是无色的), 你只能向上、 下、左、 右四个方向前进。当你从一个格子走向另一个格子时,如果两个格子的颜色相同,那你不需要花费金币;如果不同,则你需要花费1个金币。另外, 你可以花费2个金币施展魔法让下一个无色格子暂时变为你指定的颜色。但这个魔法不能连续使用, 而且这个魔法的持续时间很短,也就是说,如果你使用了这个魔法,走原创 2020-05-09 16:13:01 · 1986 阅读 · 0 评论 -
数串问题(归并排序、前缀和变体后缀和)
Description给定一个数串,数串的长度为 n ,现在将一个子串的每个数字之和定义为该子串的数串和,请你求出数串中有多少个子串的数串和为正数。Input第一行一个数 n ,表示数串的长度。第二行一共 n 个数,表示数串中的每个数输出就一个数,表示数串中有多少个子串的数串和为正数。Output一个正数即答案。Sample Input 138 -9 2Sample Output...原创 2020-05-08 10:21:24 · 770 阅读 · 1 评论 -
计算几何(二分答案or二分搜索)
Descriptionuncle-lu对计算几何有着浓厚的兴趣。他经常对着平面直角坐标系发呆,思考一些有趣的问 题。今天,他想到了一个十分有意思的题目:首先,uncle-lu会在x轴正半轴和y轴正半轴分别挑选n个点。随后,他将x轴的点与y轴 的点一一连接,形成n条线段,并保证任意两条线段不相交。uncle-lu确定这种连接方式有且仅有一种。最后,uncle-lu会给出m个询问。对于每个询问,将...原创 2020-05-06 16:02:46 · 696 阅读 · 0 评论 -
棋盘问题:任意两棋子不能同行同列(深搜dfs)
Description在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列。请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C。Input输入含有多组测试数据。每组数据的第一行是两个正整数,n,k,用一个空格隔开,表示了将在一个n∗n的矩阵内描述棋盘,以及摆放棋子的数目。当为−1 −1时表示输...原创 2020-05-05 22:19:04 · 1649 阅读 · 0 评论 -
数列分段(二分答案or二分搜索)
Description对于给定的一个长度为N的正整数数列A[1…N],现要将其分成M(M≤N)段,并要求每段连续,且每段和的最大值最小。关于最大值最小:例如一数列4 2 4 5 1要分成3段。将其如下分段:[4 2] [4 5] [1]第一段和为6,第2段和为9,第3段和为1,和最大值为9。将其如下分段:[4] [2 4] [5 1]第一段和为4,第2段和为6,第3段和为6,...原创 2020-05-05 12:42:30 · 867 阅读 · 0 评论 -
奇怪的电梯(深搜dfs)
Description有一天uncle-lu做了一个梦,梦见了一种很奇怪的电梯。大楼的每一层楼都可以停电梯,而且i层楼上有一个数字。电梯只有四个按钮:开,关,上,下。上下的层数等于当前楼层上的那个数字。当然,如果不能满足要求,相应的按钮就会失灵。例如:3,3,1,2,5代表了,从1楼开始。在1楼,按“上”可以到4楼,按“下”是不起作用的,因为没有−2楼。那么,从A楼到B楼至少要按几次按钮呢...原创 2020-05-03 17:00:23 · 800 阅读 · 0 评论 -
网线主管(二分答案or二分搜索)
Description仙境的居民们决定举办一场程序设计区域赛。裁判委员会完全由自愿组成,他们承诺要组织一次史上最公正的比赛。他们决定将选手的电脑用星形拓扑结构连接在一起,即将它们全部连到一个单一的中心服务器。为了组织这个完全公正的比赛,裁判委员会主席提出要将所有选手的电脑等距离地围绕在服务器周围放置。为购买网线,裁判委员会联系了当地的一个网络解决方案提供商,要求能够提供一定数量的等长网线。裁判...原创 2020-05-03 13:54:42 · 1731 阅读 · 0 评论 -
抓住那头牛(宽搜bfs)
Description农夫知道一头牛的位置,想要抓住它。农夫和牛都位于数轴上,农夫起始位于点N,牛位于点K。农夫有两种移动方式:1.从X移动到X−1或X+1,每次移动花费一分钟。2.从X移动到2∗X,每次移动花费一分钟。假设牛没有意识到农夫的行动,站在原地不动。农夫最少要花多少时间才能抓住牛?Input第一行为两个整数,分别为N和K。Output一个整数,农夫抓到牛所要花费的最小...原创 2020-05-03 12:09:30 · 1455 阅读 · 2 评论 -
逆序对个数(归并排序)
Description给出一个数组a,问这个数组中有多少个逆序对。逆序对定义:若i<j且a[i]>a[j],则(a[i],a[j])是一个逆序对。如数组3 4 1 2中的逆序对有(3,1),(3,2),(4,1),(4,2),共4个逆序对。Input第一行一个整数n,表示元素个数。第二行n个空格分隔的整数a[i]。Output一个数,表示逆序对个数。Samp...原创 2020-05-01 20:28:26 · 2885 阅读 · 0 评论 -
矩形分割(二分答案or二分搜索)
Description平面上有一个大矩形,其左下角坐标 (0,0),右上角坐标 (R,R)。大矩形内部包含一些小矩形,小矩形都平行于坐标轴且互不重叠。所有矩形的顶点都是整点。要求画一根平行于y轴的直线x=k( k 是整数),使得这些小矩形落在直线左边的面积必须大于等于落在右边的面积,且两边面积之差最小。并且,要使得大矩形在直线左边的的面积尽可能大。注意:若直线穿过一个小矩形,将会把它切成两个部分...原创 2020-04-30 17:05:11 · 1580 阅读 · 0 评论 -
分数线划定(o(n^2)排序算法)
Description世博会志愿者的选拔工作正在 A 市如火如荼的进行。为了选拔最合适的人才,A市对所有报名的选手进行了笔试,笔试分数达到面试分数线的选手方可进入面试。面试分数线根据计划录取人数的150%划定,即如果计划录取m名志愿者,则面试分数线为排名第[m×150%](向下取整)名的选手的分数,而最终进入面试的选手为笔试成绩不低于面试分数线的所有选手。现在就请你编写程序划定面试分数线,并...原创 2020-04-30 14:16:05 · 788 阅读 · 0 评论 -
整数奇偶数排序(o(n^2)排序算法)
Description给定10个整数的序列,要求对其重新排序。排序要求:1.奇数在前,偶数在后;2.奇数按从大到小排序;3.偶数按从小到大排序。Input输入一行,包含10个整数,彼此以一个空格分开,每个整数的范围是大于等于0,小于等于100。Output按照要求排序后输出一行,包含排序后的10个整数,数与数之间以一个空格分开。Sample Input 14 7 3 13 11 12...原创 2020-04-30 10:28:52 · 916 阅读 · 0 评论 -
括号序列(前缀和)
DescriptionUncle-lu有一个括号序列(一个全是左括号与右括号的序列),我们都知道左括号和右括号作为一对括号称为一对匹配,但是右括号和左括号作为一对括号就不能称作一对匹配。比如说")(","(()",")()“等这类序列中存在不能组成的匹配的括号,称该序列为非法序列。但是如”(())","(()())“等这类所有括号都能找到与之匹配的序列,就称该序列为合法序列。Uncle-lu想让...原创 2020-04-24 21:37:25 · 1191 阅读 · 0 评论 -
区间问题(差分数组前缀和)
DescriptionUncle-lu现在有一个长度为n的序列,淘气的uncle-lu对这个序列进行了多次的修改,每次修改的方式都是,对该序列的一段区间整体加上一个数。多次修改之后,uncle-lu想知道该序列中的某一些位置的值是多少,聪明的你一定能帮帮他。Input第一行为一个正整数n表示该序列的长度第二行为n个正整数,表示该序列第三行为一个正整数q表示接下来有q次修改接下来q行每行...原创 2020-04-24 20:24:31 · 1099 阅读 · 2 评论 -
汉诺塔(河内塔)问题(递归)
Description汉诺塔(又称河内塔)问题是印度的一个古老的传说。开天辟地的神勃拉玛在一个庙里留下了三根金刚石的棒A、B和C,A上面套着 n 个圆的金片,最大的一个在底下,其余一个比一个小,依次叠上去,庙里的众僧不倦地把它们一个个地从A棒搬到C棒上,规定可利用中间的一根B棒作为帮助,但每次只能搬一个,而且大的不能放在小的上面。僧侣们搬得汗流满面,可惜当 n 很大时这辈子恐怕就很搬了聪明的你还...原创 2020-04-22 18:05:24 · 2858 阅读 · 0 评论 -
自然数拆分问题(深搜dfs)
Description任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和。现在给你一个自然数n,要求你求出n的拆分成一些数字的和。每个拆分后的序列中的数字从小到大排序。然后你需要输出这些序列,其中字典序小的序列需要优先输出。Input第一行为一个正整数n。Output若干数的加法式子。Sample Input 17Sample Output 11+1+1+1+1+1+...原创 2020-04-22 17:25:15 · 3053 阅读 · 0 评论 -
全排列问题(深搜DFS)
题目:全排列问题Description输出自然数 1 到 n 所有不重复的排列,即 n 的全排列,要求所产生的任一数字序列中不允许出现重复的数字。Input第一行为一个整数n。Output由1至n组成的所有不重复的数字序列,每行一个序列。每个数字之间由空格隔开。Sample Input 13Sample Output 11 2 31 3 22 1 32 3 13 1 ...原创 2020-04-13 15:41:40 · 329 阅读 · 0 评论