每日算法题
文章平均质量分 67
少年负剑去
这个作者很懒,什么都没留下…
展开
-
dijkstra
接下来 m 行每行包含三个整数 x,y,z,表示存在一条从点 x 到点 y 的有向边,边长为 z。请你求出 1 号点到 n 号点的最短距离,如果无法从1 号点走到 n 号点,则输出 −1。给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环,所有边权均为正值。输出一个整数,表示 1 号点到 n 号点的最短距离。图中涉及边长均不超过10000。如果路径不存在,则输出 −1。第一行包含整数 n 和 m。原创 2024-11-01 18:50:10 · 171 阅读 · 0 评论 -
有向图的拓扑序列
若一个由图中所有点构成的序列 A 满足:对于图中的每条边 (x,y),x 在 A 中都出现在 y 之前,则称 A 是该图的一个拓扑序列。接下来 m 行,每行包含两个整数 x 和 y,表示存在一条从点 x 到点 y 的有向边 (x,y)。给定一个 n 个点 m 条边的有向图,点的编号是 1 到 n,图中可能存在重边和自环。请输出任意一个该有向图的拓扑序列,如果拓扑序列不存在,则输出 −1。共一行,如果存在拓扑序列,则输出任意一个合法的拓扑序列即可。第一行包含两个整数 n 和 m。原创 2024-10-29 20:41:21 · 327 阅读 · 0 评论 -
数与图的宽度优先遍历 图中数的层次
给定一个 n个点 m条边的有向图,图中可能存在重边和自环。所有边的长度都是 1,点的编号为 1∼n。请你求出 1号点到 n号点的最短距离,如果从 1号点无法走到 n号点,输出 −1。原创 2024-10-29 19:55:06 · 381 阅读 · 0 评论 -
7、哈希表
p进制假设A-Z个字母 求出这个数组的十进制数字(相加的结果可能过于大 所以mod上一个数字) 、就可以把整个数字映射到0 - Q-1上。原创 2024-10-25 22:14:47 · 1291 阅读 · 0 评论 -
acwing合并集合 连通块中点的数量
对于每个询问指令Q a b,都要输出一个结果,如果 a和 b 在同一集合内,则输出 Yes,否则输出 No。对于每个询问指令 Q1 a b,如果 a 和 b 在同一个连通块中,则输出 Yes,否则输出 No。,将编号为 a 和 b 的两个数所在的集合合并,如果两个数已经在同一个集合中,则忽略这个操作;接下来 m 行,每行包含一个操作指令,指令为 C a b,Q1 a b 或 Q2 a 中的一种。Q1 a b,询问点 a和点 b是否在同一个连通块中,a和 b可能相等;第一行输入整数 n 和 m。原创 2024-10-24 21:09:11 · 279 阅读 · 0 评论 -
acwing复习滑动窗口 trie字符串统计 合并集合
只要代码敲的勤快 就越写越快 又快有对。原创 2024-10-24 19:13:18 · 369 阅读 · 0 评论 -
二刷acwing kmp
给定一个字符串 S,以及一个模式串 P,所有字符串中只包含大小写英文字母以及阿拉伯数字。共一行,输出所有出现位置的起始下标(下标从 0 开始计数),整数之间用空格隔开。求出模式串 P 在字符串 S 中所有出现的位置的起始下标。模式串 P 在字符串 S 中多次作为子串出现。第一行输入整数 N,表示字符串 P 的长度。第三行输入整数 M,表示字符串 S 的长度。第二行输入字符串 P。第四行输入字符串 S。原创 2024-10-22 20:27:20 · 192 阅读 · 0 评论 -
二刷acwing滑动窗口
第一行包含两个整数 n 和 k,分别代表数组长度和滑动窗口的长度。该数组为 [1 3 -1 -3 5 3 6 7],k 为 3。你的任务是确定滑动窗口位于每个位置时,窗口中的最大值和最小值。有一个大小为 k 的滑动窗口,它从数组的最左边移动到最右边。第一行输出,从左至右,每个位置滑动窗口中的最小值。第二行输出,从左至右,每个位置滑动窗口中的最大值。第二行有 n 个整数,代表数组的具体数值。代码真的要多刷阿 二刷还是写错了。给定一个大小为n≤10^6的数组。每次滑动窗口向右移动一个位置。原创 2024-10-22 19:48:21 · 238 阅读 · 0 评论 -
P2866 [USACO06NOV] Bad Hair Day S
农夫约翰有N头奶牛正在过乱头发节。每一头牛都站在同一排面朝右,它们被从左到右依次编号为12⋯N。编号为i的牛身高为hi。第N头牛在最前面,而第1头牛在最后面。对于第i头牛的第j头牛,如果hihi1hihi2⋯hihj,那么认为第i头牛可以看到第i1到第j头牛。定义Ci为第i头牛所能看到的牛的数量。请帮助农夫约翰求出C1C2⋯CN。原创 2024-10-21 20:11:33 · 1090 阅读 · 0 评论 -
P2952 [USACO09OPEN] Cow Line S
Farmer John(以下简称 FJ)的N头奶牛(用1N编号)在直线上排队。一开始,这条线上没有任何奶牛,随着时间的推移,奶牛们会一个接一个地站到队伍的左边或右边。又过了一会儿,某些奶牛会从队伍里离开,去吃自己最喜欢的草料。FJ 无法跟踪每一头奶牛,于是,他想让你来帮助他。奶牛以1N的顺序排队,并且离开的奶牛不会再次回来。数据将会给出S1≤S≤100000AK输入的命令一定是可以执行的。所有的操作结束后,你的程序应该以从左到右的顺序输出这个奶牛队列。数据保证最后的队列不空。1。原创 2024-10-21 19:32:19 · 980 阅读 · 0 评论 -
P1427 小鱼的数字游戏P1028 数的计算
小鱼最近被要求参加一个数字游戏,要求它把看到的一串数字ai(长度不一定,以0结束),记住了然后反着念出来(表示结束的数字0就不要念出来了)。这对小鱼的那点记忆力来说实在是太难了,你也不想想小鱼的整个脑袋才多大,其中一部分还是好吃的肉!所以请你帮小鱼编程解决这个问题。原创 2024-09-13 11:10:01 · 1385 阅读 · 0 评论 -
acwing斐波那契额数列 翻硬币
现在小明的问题是:如果已知了初始状态和要达到的目标状态,每次只能同时翻转相邻的两个硬币,那么对特定的局面,最少要翻动多少次呢?桌上放着排成一排的若干硬币。我们用 * 表示正面,用 o 表示反面(是小写字母,不是零)。在一行中输出斐波那契数列的前 NN 项,数字之间用空格隔开。两行等长的字符串,分别表示初始状态和要达到的目标状态。这个数列从第 33 项开始,每一项都等于前两项之和。输入一个整数 NN,请你输出这个序列的前 NN 项。我们约定:把翻动相邻的两个硬币叫做一步操作。小明正在玩一个“翻硬币”的游戏。原创 2024-09-12 21:35:51 · 468 阅读 · 0 评论 -
递归(c++)
从 1∼n1∼n 这 nn 个整数中随机选出 mm 个,输出所有可能的选择方案。其次,对于两个不同的行,对应下标的数一一比较,字典序较小的排在前面(例如。从 1~n 这 n 个整数中随机选取任意多个,输出所有可能的选择方案。把 1~n 这 n 个整数排成一行后随机打乱顺序,输出所有可能的次序。其次,对于两个不同的行,对应下标的数一一比较,字典序较小的排在前面。首先,同一行内的数升序排列,相邻两个数用一个空格隔开。按照从小到大的顺序输出所有方案,每行 11 个。按照从小到大的顺序输出所有方案,每行1个。原创 2024-09-11 22:28:41 · 601 阅读 · 0 评论 -
洛谷 P1888 三角函数P2676 [USACO07DEC] Bookshelf B
输入一组勾股数abcabc,用分数格式输出其较小锐角的正弦值。(要求约分。原创 2024-09-02 14:27:47 · 967 阅读 · 0 评论 -
Dijkstra(c++)
迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959年提出的,因此又叫狄克斯特拉算法。是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路径问题。迪杰斯特拉算法主要特点是从起始点开始,采用贪心算法的策略,每次遍历到始点距离最近且未访问过的顶点的邻接节点,直到扩展到终点为止。同时dijkstra算法主要用于解决单源最短路问题(边权为正数),其可以分为两种版本,两种版本各有用处,并不存在好坏之分,接下来我们用n代表点的数量,用m代表边的数量。原创 2024-08-24 16:18:08 · 935 阅读 · 0 评论 -
c++拓扑排序
图的拓扑序列是针对有向图来说的 无向图没有拓扑序列若一个由图中所有点构成的序列 A 满足:对于图中的每条边 (x,y),x 在 A 中都出现在 y 之前,则称 A 是该图的一个拓扑序列。举个例子:在下图中有一个序列 在该序列中 1 2 3为一个拓扑序列因为在(1,2)中 1在2前面 (1,3)中 1在3前面 (2,3)中 2在3前面所以成立并不是每个序列都有拓扑序列举个例子:如下图所示 如果存在环 一定没有拓扑序列有向无环图又被称为拓扑图在这里在介绍两个概念 : 入度和出度。原创 2024-08-23 22:27:47 · 374 阅读 · 0 评论 -
acwing树的重心
给定一颗树,树中包含 n 个结点(编号 1∼n)和 n−1 条无向边。请你找到树的重心,并输出将重心删除后,剩余各个连通块中点数的最大值。重心定义:重心是指树中的一个结点,如果将这个点删除后,剩余各个连通块中点数的最大值最小,那么这个节点被称为树的重心。原创 2024-08-22 22:03:39 · 307 阅读 · 0 评论 -
acwing走迷宫
一个人位于左上角 (1,1)处,已知该人每次可以向上、下、左、右任意一个方向移动一个位置。请问,该人从左上角移动至右下角 (n,m) 处,给定一个 n×m 的二维整数数组,用来表示一个迷宫,数组中只包含 0 或 1,其中 0 表示可以走的路,1 表示不可通过的墙壁。的坐标,这里举一些特殊的情况:距离为3的点 ,最后可以得到如上图所示。数据保证 (1,1) 处和 (n,m) 处的数字为 0,且一定至少存在一条通路。接下来 n 行,每行包含 m 个整数(0 或 1),表示完整的二维数组迷宫。原创 2024-08-21 16:54:57 · 383 阅读 · 0 评论 -
P1036 [NOIP2002 普及组] 选数
在dfs函数中,我们明显能看到一个参数 startx。比如说在6里面随便选5个数,那么选法都是什么呢?其实这里的难点是:def算法 加上 如何去重?是startx而不是start是为了避免关键字。个整数相加,可分别得到一系列的和。知道了不降原则,咱们再来see see 代码。现在,要求你计算出和为素数共有多少种。”应该是4,因为是升序排列。也就是最小的,符合不降原则的参数。就是这样的,枚举还是蛮清晰的吧。所以说,这样就可以避免判重了。咱们最主要看其中不降原则的部分。输出一个整数,表示种类数。原创 2024-08-19 23:28:47 · 809 阅读 · 0 评论 -
acwing跳台阶、走方格
的方格阵,沿着方格的边线走,从左上角 (0,0)开始,每次只能往右或者往下走一个单位距离,问走到右下角 (n,m)一共有多少种不同的走法。下面来解释一下图上的内容 ,因为每一次可以跳一级或者两级,所以在该图中每次数字之间的差距也都是1或者是2,该图中就列举出了所有的可能性,最后只需要计算出最终数字为5的次数就可以了。该题主要运用的思想是递归的思想,也涉及到了dfs(深度优先搜索)算法。一个楼梯共有 n 级台阶,每次可以走一级或者两级,共一行,包含一个整数,表示走法数量。共一行,包含一个整数,表示方案数。原创 2024-08-18 23:51:33 · 380 阅读 · 0 评论 -
acwing排列数字和n皇后问题
每个解决方案占 n行,每行输出一个长度为 n的字符串,用来表示完整的棋盘状态。其中 . 表示某一个位置的方格状态为空,Q 表示某一个位置的方格上摆着皇后。每个方案输出完成后,输出一个空行。n−皇后问题是指将 n个皇后放在 n×n的国际象棋棋盘上,使得皇后不能相互攻击到,即任意两个皇后都不能处于同一行、同一列或同一斜线上。所以可以枚举每一行,枚举每一行 这个皇后就放到每一行上去。现在给定整数 n,请你输出所有的满足条件的棋子摆法。3是指 第二行 第三个位置放一个皇后。共一行,包含整数 n。原创 2024-08-12 23:44:01 · 558 阅读 · 0 评论 -
P3375 【模板】KMP
给出两个字符串s1和s2,若s1的区间lr子串与s2完全相同,则称s2在s1中出现了,其出现位置为l。现在请你求出s2在s1中所有出现的位置。定义一个字符串s的 border 为s的一个s的子串t,满足t既是s的前缀,又是s的后缀。对于s2,你还需要求出对于其每个前缀s′的最长 bordert′的长度。原创 2024-08-08 15:40:45 · 1019 阅读 · 0 评论 -
洛谷:P1151子数整数 P1046陶陶摘苹果 P1152欢快的跳 P1161开灯P1035级数求和
对于一个五位数a1a2a3a4a5sub1a1a2a3sub2a2a3a4sub3a3a4a5例如,五位数20207可以拆分成sub1202sub202020sub3207现在给定一个正整数K,要求你编程求出10000到30000之间所有满足下述条件的五位数,条件是这些五位数的三个子数sub。原创 2024-08-07 11:45:42 · 921 阅读 · 0 评论 -
洛谷P1150 Peter 的烟
Peter 有 nn 根烟,他每吸完一根烟就把烟蒂保存起来,k(k>1)个烟蒂可以换一个新的烟,那么 Peter 最终能吸到多少根烟呢?与某些脑筋急转弯不同的是,Peter 并不能从异次元借到烟蒂,抽完后再还回去。对于 100%100% 的数据,1原创 2024-08-06 23:48:52 · 265 阅读 · 0 评论 -
用数组处理单链表(c++)
/head 表示头节点的下标//e[i] 表示节点i的值为多少//ne[i] 表示节点i的next指针是多少//idx 相当于一个指针 表示当前已经用到了哪个点。原创 2024-08-06 00:46:38 · 536 阅读 · 0 评论 -
最长连续不重复子序列
对于j来说,每个i都有个对应的j,j变现为往右移动或者不动(j是不会往左移动的,这很好证明),最多移动n次。起初一直是i一直往右移动,j一直在索引0的位置,并且i每次移动,q数组都会去记录i移动所经过的数字。用a[N]来存输入的数,用q[N]来存数出现的次数,例如s[a[i]]就表示a[i]出现的次数。当q[j]出现的次数大于1时,说明出现了重复元素,此时i停止运动,开始移动j来使重复元素消除。给定一个长度为 n 的整数序列,请找出最长的不包含重复的数的连续区间,输出它的长度。对于i来说,移动n次;原创 2024-08-04 22:45:17 · 202 阅读 · 0 评论 -
蓝桥杯题库及解析(java语言)
小蓝正在学习一门神奇的语言,这门语言中的单词都是由小写英文字母组 成,有些单词很长,远远超过正常英文单词的长度。输出两行,第一行包含一个英文字母,表示单词中出现得最多的字母是哪 个。char类型运算与数形运算不同,char运算用到的是ACII码,两个字符相减实际上是ACII码对应的数相减,现在,请你帮助小蓝,给了一个单词后,帮助他找到出现最多的字母和这 个字母出现的次数。第二行包含一个整数,表示出现得最多的那个字母在单词中出现的次数。//记录所输入的字符串的每个字母的个数。最大运行内存: 256M。原创 2023-08-14 01:33:04 · 460 阅读 · 0 评论 -
蓝桥杯题库及解析(java语言版)
题目描述小蓝要为一条街的住户制作门牌号。这条街一共有 2020位住户,门牌号从 1 到 2020 编号。小蓝制作门牌的方法是先制作 0 到 9 这几个数字字符,最后根据需要将字符粘贴到门牌上,例如门牌 1017 需要依次粘贴字符 1、0、1、7,即需要 1 个字符 0,2 个字符 1,1 个字符 7。请问要制作所有的 1 到2020 号门牌,总共需要多少个字符 2?参考代码://记录2的总次数//创建一个字符串去把 数字全部保存下来 然后计算这么长的数字中2的个数。原创 2023-08-14 01:43:34 · 264 阅读 · 0 评论 -
蓝桥杯题库及解析(java语言)
日常开发中使用到的取随机数的函数,概念也比较简单,即系统随机得到一个0(包含)~1(不包含)之间的数,一般我们在需要获取某个范围内的随机值时会使用到该函数。比如Math.round(X), 1、当X为正数时,第一步先X+0.5,第二步观察得到的结果的小数点左边的数为多少,则最后的取整结果就为多少。2、当X为负数时,第一步先X+0.5,第二步观察得到的结果的小数点左边的数为多少,并判断+0.5后得到的数大于0还是小于0,小于0则最后的取整的结果为-(小数点左边的数+1),大于0则取整结果为小数点左边的数。原创 2023-08-14 01:34:28 · 480 阅读 · 0 评论 -
逆序对的数量(c++)
给定一个长度为 n 的整数数列,请你计算数列中的逆序对的数量。逆序对的定义如下:对于数列的第 i 个和第 j 个元素,如果满足 i<j 且 a[i]>a[j],则其为一个逆序对;否则不是。原创 2024-08-03 16:26:06 · 473 阅读 · 0 评论
分享