- 博客(36)
- 收藏
- 关注
原创 参考文献(C++)
假设博客里面一共有 n(n≤10^3) 篇文章(编号为 1 到 n)以及 m(m≤10^4 ) 条参考文献引用关系。目前小明已经打开了编号为 1 的一篇文章,请帮助小明设计一种方法,使小明 可以不重复、不遗漏的看完所有他能看到的文章。现在已知整理好的参考文献关系图,其中,文献 X → Y 表示文章 X 有参考文献 Y。小明求知欲旺盛,如果他看了某篇文章,那么他一定会去看这篇文章的参考文献(如果他之前已经看过这篇参考文献的话就不用再看它了)。请对输入的图分别进行 DFS 和 BFS遍历,并输出遍历结果。
2024-07-20 08:20:15 443
原创 图的访问(C++)
接下来 M 行,每行 2 个整数 Ui,Vi,表示一条从 Ui 到 Vi 的有向边 (Ui,Vi)。给出 N 个点,M 条边的有向图,对于每个点 v,求 A(v) 表示从点 v 出发,能到达的编号最大的点。一行 N 个整数 A(1),A(2),…第 1 行 2 个整数 N,M,表示点数和边数。对于 100% 的数据,1≤N,M≤105。对于 60% 的数据,1≤N,M≤103。
2024-07-19 17:18:52 437
原创 点的距离(C++)
给定一棵 n 个点的树,Q 个询问,每次询问点 x 到点 y 两点之间的距离。接下来 n-1 行,每行两个整数 x,y 表示 x,y 之间有一条连边;对于全部数据,1<= n,Q<= 10^5,1<= x,y<= n。接下来 Q 行每行两个整数 x,y 表示询问 x 到 y 的距离。第一行一个正整数 n,表示这棵树有 n 个节点;然后一个整数 Q,表示有 Q 个询问;输出 Q 行,每行表示每个询问的答案。
2024-07-19 01:00:00 334
原创 国王(C++)
在n×n (1<=n<=10)的棋盘上放k(0<=k<=n×n)个国王(一个国王可以攻击相邻的8个格子),求使他们无法互相攻击的方案总数。输出一行表示方案总数,若不能够放置则输出0。只有一行为两个整数n和k。
2024-07-18 20:34:45 220
原创 FBI树(C++)
我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为 B 串,全“1”串 称为 I 串,既含“0”又含“1”的串则称为 F 串。FBI树是一种二叉树,它的结点类型也包括F结点,B结点和I结点三种。若串 S 的长度大于 1,将串 S 从中间分开,分为等长的左右子串 S1 和 S2;现在给定一个长度为 2^N 的“01”串,请用上述构造方法构造出一棵FBI树,并输出它的 后序遍历2序列。输入第一行是一个整数N(0 <= N <= 10),第二行是一个长度为 2^N 的“01 ” 串。
2024-07-18 06:58:37 419
原创 二叉树遍历(C++)
树和二叉树基本上都有先序、中序、后序、按层遍历等遍历顺序, 给定中序和其它一种 遍历的序列就可以确定一棵二叉树的结构。假定一棵二叉树一个结点用一个字符描述,现在给出中序和按层遍历的字符串,求该树 的先序遍历字符串。输入共两行,每行是由字母组成的字符串(一行的每个字符都是唯一的), 分别表示二叉树的中序遍历和按层遍历的序列。输出就一行,表示二叉树的先序序列。
2024-07-18 06:57:32 334
原创 找树根和孩子(C++)
每行两个结点x和y,表示y是x的孩子(x,y<=1000)。给定一棵树,输出树的根root,孩子最多的结点max以及他的孩子。第一行:n(结点数<=100),m(边数<=200)。第三行:max的孩子,按照从小到大的顺序输出。第二行:孩子最多的结点max。第一行:树根:root。
2024-07-17 14:57:27 364
原创 高精度乘法(C++)
输入两个高精度正整数M和N(M和N均小于100位)。求这两个高精度数的积。输入两个高精度正整数M和N。求这两个高精度数的积。
2024-07-15 07:46:14 268
原创 高精度减法(C++)
共2行,第1行是被减数a,第2行是减数b。每个大整数不超过200位,不会有多余的前导零。注意,a 可能小于 b。求两个大的正整数相减的差。
2024-07-15 07:44:58 247
原创 高精度加法(C++)
输入共两行,第一行一个正整数 A(1<=A<=10^100)。第二行一个正整数 B(1<=B<=10^100)。输入两个正整数 A 和 B,求它们的和。输出 A+B 的结果。
2024-07-15 07:43:40 251
原创 选课(C++)
有些课程可以直接选修,有些课程需要一定的基础知识,必须在选了其他的一些课程基础上才能选修。学生不可能学完大学开设的所有课程,因此必须在入学时选定自己要学的课程。每个学生可选课程的总数是给定的。上例中课号 1 是课号 2 的先修课,即如果要先修课号 2 ,则课号 1 必定已被选过。每行两个数,依次表示这门课先修课课号(若不存在,则该项值为 0 )和该门课的学分。每门课程都有一定的学分,学生只要选修了这门课并通过考核就能获得相应学分。输入的第一行包括两个正整数 M,N ,分别表示待选课程数和可选课程数。
2024-07-14 16:13:02 389
原创 二叉苹果树(C++)
一棵有四根树枝的苹果树,因为树枝太多了,需要剪枝。但是一些树枝上长有苹果,给定需要保留的树枝数量,求最多能留住多少苹果。接下来N−1行描述树枝信息,每行三个整数,前两个是它连接的节点的编号,第三个数是这根树枝上苹果数量。对于 100 的数据,1≤Q≤N≤100,N≠1 ,每根树枝上苹果不超过 30000 个。有一棵二叉苹果树,如果数字有分叉,一定是分两叉,即没有只有一个儿子的节点。第一行两个数 N 和 Q ,N 表示树的节点数,Q 表示要保留的树枝数量。N 个节点,标号1 至 N ,树根编号一定为 1。
2024-07-14 16:10:11 395
原创 能量项链(C++)
并且,对于相邻的两颗珠子,前一颗珠子的尾标记一定等于后一颗珠子的头标记。因为只有这样,通过吸盘(吸盘是 喵星人吸收能量的一种器官)的作用,这两颗珠子才能聚合成一颗珠子,同时释放出可以被吸盘吸收的能量。如果前一颗能量珠的头标记为 m,尾标记为 r,后一颗能量珠的头标记为 r,尾标记为 n,则聚合后释放的能量为 m×r×n(喵星单位),新产生的珠子的头标记为 m,尾标记为 n。第 i 个数为第 i 颗珠子的头标记(1≤i≤N),当 i<N 时,第 i 颗珠子的尾标记应该等于第 i+1 颗珠子的头标记。
2024-06-15 20:56:36 417
原创 石子合并(C++)
将 n 堆石子绕圆形操场排放,现要将石子有序地合并成一堆。规定每次只能选相邻的两堆合并成新的一堆,并将新的一堆的石子数记做该次合并的得分。1、选择一种合并石子的方案,使得做 n−1 次合并得分总和最大。2、选择一种合并石子的方案,使得做 n−1 次合并得分总和最小。输入第一行一个整数 n ,表示有 n 堆石子。第二行 n 个整数,表示每堆石子的数量。对于 100的数据,有1≤n≤200。第一行为合并得分总和最小值,第二行为合并得分总和最大值。
2024-06-15 20:53:34 330
原创 十进制转换成八进制(递归)
用递归算法,把任一给定的十进制正整数转换成对应的八进制数输出。输出一个正整数,表示转换之后的八进制的数。输入一个正整数,表示需要转换的十进制数。
2024-05-31 21:59:19 454
原创 求斐波那切数列(C++)
斐波那切数列 0,1,1,2,3,5,8,13,21,34,55……从第三项起,每一项都是紧挨着的前两项的和。求出斐波那契数列的第n项数。输入所求的项数n, n<=33。
2024-05-31 21:57:51 340
原创 区间和(C++)
每行有三个正整数k,a,b (k=0 或1,a,b≤n ).k=0 时表示将a 处数字加上b ,k=1 时表示询问区间[a,b ]内所有数的和。输入数据第一行包含两个正整数n,m(n≤100000,m≤500000) ,以下是m 行,给定一个全部为零的数列,规定有两种操作,一是修改某个元素,二是求区间的连续和。对于每个询问输出对应的答案。
2024-05-29 21:46:06 393
原创 第一个大于或等于(二分查找与二分答案)
第一行两个整数N和M(1<=M<=N<=100000),分别表示有序整数序列数字的个数和询问的次数。接下来一行一共有N个整数,表示整数序列上的数字,保证数字是有序的。最后M行,每行一个整数表示要询问的数字x。给出N个已经从小到大排好的有序整数序列(可能会有相同的数字),然后有M次询问,每次询问一个数字X, 表示需要找出整数序列中第一个大于或等于整数x的数在整数序列中的位置。对于每个询问都输出一个对应的结果,数据保证每个询问都有解。
2024-05-29 21:34:53 434
原创 A Simple Problem with Integers(C++)
C、lrx :给定 l,r,x ,对于所有 i∈[l,r] ,将 a[i] 加上 x (换言之,将 a[l],a[l+1],…Q、lr :给定l,r ,求 ∑ri=la[i] 的值(换言之,求 a[l]+a[l+1]+⋯+a[r] 的值)。第二行n 个整数a[1],a[2],…对于所有数据,1≤n,q≤106,∣a[i]∣≤106,1≤l≤r≤n,∣x∣≤106。给定数列 a[1],a[2],…C、lrx :对于所有 i∈[l,r] ,将 a[i] 加上 x;保证 1≤l≤r≤n,∣x∣≤106。
2024-05-27 21:58:50 321
原创 寻找等于x的数的位置(二分查找与二分答案)
第一行两个整数N和M(1<=M<=N<=100000),分别表示有序整数序列数字的个数和询问的次数。接下来一行一共有N个整数,表示整数序列上的数字,保证数字是有序的。最后M行,每行一个整数表示要询问的数字x。数字大小范围都在[0,200000]。给出N个已经从小到大排好的有序整数序列(没有相同的数字),然后有M次询问,每次询问一个数字X, 表示需要找出等于整数x的数在整数序列中的位置。对于每个询问都输出一个对应的结果,数据保证每个询问都有解。
2024-05-22 21:53:10 449
原创 走迷宫(C++)
第一行是两个整数,R和C,代表迷宫的长和宽。( 1<= R,C <= 40) 接下来是R行,每行C个字符,代表整个迷宫。空地格子用‘.’表示,有障碍物的格子用‘#’表示。迷宫左上角和右下角都是‘.’。输出从左上角走到右下角至少要经过多少步(即至少要经过多少个空地格子)。计算步数要包括起点和终点。给定一个迷宫,求从左上角走到右下角最少需要走多少步(数据保证一定能走到)。只能在水平方向或垂直方向走,不能斜着走。一个迷宫由R行C列格子组成,有的格子里有障碍物,不能走;有的格子是空地,可以走。
2024-05-21 17:25:13 272
原创 棋盘游戏(C++)
前四行,每行 4 个数字(1 或者 0),描述了初始棋盘;第六到第九行,每行 4个数字(1或者 0),描述了最终棋盘。在一个4×4的棋盘上有8个黑棋和 8个白棋,当且仅当两个格子有公共边,这两个格子上的棋是相邻的。移动棋子的规则是交换相邻两个棋子。给出一个初始棋盘和一个最终棋盘,请找出一个最短的移动序列使初始棋盘变为最终棋盘。n,表示最少的移动步数。
2024-05-21 17:13:32 229
原创 Phone List(C++)
给定 n 个长度不超过 10 的数字串,问其中是否存在两个数字串 S,T,使得 S 是 T 的前缀,多组数据。对于每组数据,若存在两个数字串 S,T,使得 S 是 T 的前缀,则输出 NO ,否则输出 YES。对于每组数据,第一行一个数 n,接下来 n 行输入 n 个数字串。第一行一个整数 T,表示数据组数。请注意此处结果与输出的对应关系!
2024-05-21 17:07:47 210
原创 Keywords Search(C++)
给定 n 个长度不超过 50 的由小写英文字母组成的单词准备查询,以及一篇长为 m 的文章,问:文中出现了多少个待查询的单词。第一行一个整数 T,表示数据组数;对于每组数据,第一行一个整数 n,接下去 n 行表示 n 个单词,最后一行输入一个字符串,表示文章。对于全部数据,1<= n<= 10^4,1<= m<= 10^6。对于每组数据,输出一个数,表示文中出现了多少个待查询的单词。
2024-05-19 17:27:16 114 1
原创 细胞(广度优先搜索)
一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。第一行为矩阵的行n和列m, n和m不超过100;下面为一个n×m的矩阵。
2024-05-19 17:02:15 175
原创 走迷宫2(暴力枚举与深度优先搜索)
给定一个N*M方格的迷宫(1<=N,M<=5),迷宫里有T处障碍,障碍处不可通过。给定起点坐标和终点坐标,问从起点坐标走到终点坐标一共有几种不同的走法,同一种走法中要求每个方格最多经过一次。在迷宫中移动有上下左右四种方式,每次只能移动一个方格。迷宫最左上方的格子坐标为(1,1),最右下方的格子的坐标为(N,M)。第一行三个整数:N、M和T,N为行,M为列,T为障碍总数。第二行四个整数:起点坐标SX,SY,终点坐标FX,FY。接下来T行,每行两个整数,为障碍点的坐标。从起点坐标走到终点坐标的方案数。
2024-05-19 16:56:28 137
原创 走迷宫1(暴力枚举与深度优先搜索)
给定一个N*M方格的迷宫(1<=N,M<=5),迷宫里有T处障碍,障碍处不可通过。给定起点坐标和终点坐标,问能不能从起点坐标走到终点坐标,并要求每个方格最多经过一次。在迷宫中移动有上下左右四种方式,每次只能移动一个方格。迷宫最左上方的格子坐标为(1,1),最右下方的格子的坐标为(N,M)。第二行四个整数:起点坐标SX, SY,终点坐标FX, FY。第一行三个整数:N、M和T,N为行,M为列,T为障碍总数。如果能从起点坐标走到终点坐标就输出YES, 否则输出NO。接下来T行,每行两个整数,为障碍点的坐标。
2024-05-19 16:53:49 134
原创 城市交通图(广度优先搜索)
有n座城市,(2<n<=26), 用大写字母A、B、 C....表示,另外有m条路线将这n座城市连成了可以从任意一个城市出发都可达到其它任意城市的交通图,每条路线的距离都为1。给出起点城市和终点城市,输出从起点城市到终点城市的最短距离。第一行两个整数n和m(2<m<=100)。第二行两个大写字母,分别表示起点和终点城市。接下来m行,每行两个大写字母,表示这两个大写字母所表示的城市之间有一条道路。输出从起点城市到终点城市途中经过其它城市最少的一条路线(从终点开始倒过来输出路径)。
2024-05-19 16:47:20 397
原创 完全背包(C++)
设有n种物品,每种物品有一个重量及一个价值。但每种物品的数量是无限的,同时有一个背包,最大载重量为M,今从n种物品中选取若干件(同一种物品可以多次选取),使其重量的和小于等于M,而价值的和为最大。第一行:两个整数,M(背包容量,M≤200)和N(物品数量,N≤30);第2..N+1行:每行二个整数Wi,Ci,表示每个物品的重量和价值。仅一行,一个数,表示最大总价值。
2024-05-18 18:19:39 204
原创 01背包(C++)
一个旅行者有一个最多能装 M公斤的背包,现在有 n 件物品,它们的重量分别是W1,W2,...,Wn,它们的价值分别为C1,C2,...,Cn,求旅行者能获得最大总价值。第一行:两个整数,M(背包容量,M<=200)和N(物品数量,N<=30);第2..N+1行:每行二个整数Wi,Ci,表示每个物品的重量和价值。仅一行,一个数,表示最大总价值。
2024-05-18 18:18:21 135
原创 最长公共子序列(C++)
例如,序列z = {B,C,D,B} 是序列 X = {A,B,C,B,D,A,B}的子序列,相应的递增下标序列为{2,3,5,7}。给定两个序列X和Y,当另一序列Z既是X的子序列又是Y的子序列时,称Z是序列X和Y的公共子序列。例如,若X={A,B,C,B,D,A,B}和Y={B,D,C,A,B,A},则序列{B,C,A}是X和Y的一个公共子序列,序列 {B,C,B,A}也是X和Y的一个公共子序列。,zk}是X的子序列是指存在一个严格递增的下标序列{i1,i2,…,ik},使得对于所有j=1,2,…
2024-05-18 15:20:39 675
原创 最长上升子序列
给出一个由 n(n≤5000) 个不超过 106 的正整数组成的序列。第一行,一个整数 n,表示序列长度。第二行有 n 个整数,表示这个序列。取出一些数字排在一起,这些数字是。最长上升子序列是指,从原序列中。
2024-05-18 15:18:35 160
原创 跳格子游戏升级版(动态规划)
有n个格子,编号为1~n,从1号格子开始往前跳,每次只能往前跳1~3格,最终要跳到n号格子,格子里面所对应的数字大小表示跳到当前格子可以获得的分数,格子里的数字大小可能会是负数,问如何跳可以累计获得最大分数。第二行n个用空格隔开的整数,分别代表每个格子里所对应的数字大小。注意,输入数据能保证1号格子里的数字大小永远是0。输出一个整数表示可以获得的最大分数。
2024-05-18 10:37:49 130
原创 跳格子游戏(动态规划)
有n个格子,编号为1~n,从1号格子开始往前跳,每次只能往前跳2格或3格,最终要跳到n号格子,格子里面所对应的数字大小表示跳到当前格子可以获得的分数,格子里的数字大小不会是负数,问如何跳可以累计获得最大分数。第二行n个用空格隔开的非负整数,分别代表每个格子里所对应的数字大小。注意,输入数据能保证1号格子里的数字大小永远是0。输出一个整数表示可以获得的最大分数。
2024-05-18 10:33:32 145
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人