- 博客(33)
- 收藏
- 关注
原创 pta懂蛇语(<<<如何从读取的一行字符串中单独操作其中的每个字符串>>>)
【代码】pta懂蛇语(<<<如何从读取的一行字符串中单独操作其中的每个字符串>>>)
2025-03-21 17:17:00
106
原创 搜索算法知识点总结以及相关经验分享
搜索算法思维导图实现方式:递归、栈(非递归)特点:一条路走到底,适合找所有解/存在性问题经典问题:排列组合、N皇后、迷宫路径(非最短)广度优先搜索(BFS)实现方式:队列特点:逐层扩展,适合找最短路径/最少操作经典问题:迷宫最短路径、二叉树层序遍历、八数码问题关键:递归后恢复状态(如撤销选择)例题:全排列、子集生成剪枝优化可行性剪枝:当前路径不可能满足条件时停止(如总和超过目标)最优性剪枝:当前路径代价已超过已知最优解重复状态剪枝:避免重复搜索相同状态(用哈希表记录)
2025-02-03 11:08:42
312
原创 fill和memset详解
fill:是 C++ 标准库中的算法函数,定义在头文件中。它通过迭代器指定一个范围,然后将该范围内的每个元素都设置为指定的值。memset:是 C 和 C++ 中的一个标准库函数,定义在(C++)或<string.h>(C)头文件中。它主要用于对一段内存空间进行字节级别的填充操作。
2024-12-17 18:56:03
409
原创 求最小生成树两种常用算法(Prim,Kruskal)
思路: 用结构体将所有边存下来,并且把边按照从小到大的顺序排列,用变量cnt记录最小生成树的边数。再遍历所有的边,如果边上的两个点都在一个集合里面,就不加入最小生成树,反之就加入,遍历完之后,如果最下生成树的边数小于n-1,就代表没有最小生成树。更新集合,生成树,边数。
2024-12-10 22:07:11
571
原创 L2-028 秀恩爱分得快
互联网上每天都有大量人发布大量照片,我们通过分析这些照片,可以分析人与人之间的亲密度。任意两个人如果同时出现在若干张照片里,他们之间的亲密度就是所有这些同框照片对应的亲密度之和。输入在第一行给出 2 个正整数:N(不超过1000,为总人数——简单起见,我们把所有人从 0 到 N-1 编号。但如果 A 和 B 正是彼此亲密度最高的一对,则只输出他们的编号,无论是否还有其他人并列。其中 K(≤ 500)是该照片中出现的人数,P[1] ~ P[K] 就是这些人的编号。同行数字以空格分隔。古人云:秀恩爱,分得快。
2024-12-09 21:04:51
179
原创 L2-028 秀恩爱分得快 分数
互联网上每天都有大量人发布大量照片,我们通过分析这些照片,可以分析人与人之间的亲密度。任意两个人如果同时出现在若干张照片里,他们之间的亲密度就是所有这些同框照片对应的亲密度之和。输入在第一行给出 2 个正整数:N(不超过1000,为总人数——简单起见,我们把所有人从 0 到 N-1 编号。但如果 A 和 B 正是彼此亲密度最高的一对,则只输出他们的编号,无论是否还有其他人并列。其中 K(≤ 500)是该照片中出现的人数,P[1] ~ P[K] 就是这些人的编号。同行数字以空格分隔。古人云:秀恩爱,分得快。
2024-12-08 22:38:13
220
原创 L2-027 名人堂与代金券 分数 25
对于在中国大学MOOC(http://www.icourse163.org/ )学习“数据结构”课程的学生,想要获得一张合格证书,总评成绩必须达到 60 分及以上,并且有另加福利:总评分在 [G, 100] 区间内者,可以得到 50 元 PAT 代金券;输入在第一行给出 3 个整数,分别是 N(不超过 10 000 的正整数,为学生总数)、G(在 (60,100) 区间内的整数,为题面中描述的代金券等级分界线)、K(不超过 100 且不超过 N 的正整数,为进入名人堂的最低名次)。题目保证没有重复的账号。
2024-12-07 19:15:49
531
原创 本人总结的算法题易错点以及注意事项(会不断更新!!!)
数组一般不要定义在主函数内,因为在主函数外部定义会自动初始化,而内部定义不会自动初始化,需要自己手动初始化否则代码报错对于那些题目给n个点或者n个人,n件事等等这些,一定要考虑n等于1的情况,该特判就特判
2024-12-06 22:37:18
118
原创 L2-026 小字辈 分数 25
输入在第一行给出家族人口总数 N(不超过 100 000 的正整数) —— 简单起见,我们把家族成员从 1 到 N 编号。随后第二行给出 N 个编号,其中第 i 个编号对应第 i 位成员的父/母。家谱中辈分最高的老祖宗对应的父/母编号为 -1。一行中的数字间以空格分隔。首先输出最小的辈分(老祖宗的辈分为 1,以下逐级递增)。然后在第二行按递增顺序输出辈分最小的成员的编号。编号间以一个空格分隔,行首尾不得有多余空格。本题给定一个庞大家族的家谱,要请你给出最小一辈的名单。
2024-12-06 22:29:55
158
原创 L2-025 分而治之
输入在第一行给出两个正整数 N 和 M(均不超过10 000),分别为敌方城市个数(于是默认城市从 1 到 N 编号)和连接两城市的通路条数。随后 M 行,每行给出一条通路所连接的两个城市的编号,其间以一个空格分隔。分而治之,各个击破是兵家常用的策略之一。在战争中,我们希望首先攻下敌方的部分城市,使其剩余的城市变成孤立无援,然后再分头各个击破。其中 Np 是该方案中计划攻下的城市数量,后面的系列 v[i] 是计划攻下的城市编号。对每一套方案,如果可行就输出YES,否则输出NO。L2-025 分而治之。
2024-12-06 22:12:12
149
原创 L2-024 部落
在一个社区里,每个人都有自己的小圈子,还可能同时属于很多不同的朋友圈。我们认为朋友的朋友都算在一个部落里,于是要请你统计一下,在一个给定社区中,到底有多少个互不相交的部落?首先在一行中输出这个社区的总人数、以及互不相交的部落的个数。随后对每一次查询,如果他们属于同一个部落,则在一行中输出Y,否则输出N。其中K是小圈子里的人数,P[i](i=1,⋯,K)是小圈子里每个人的编号。这里所有人的编号从1开始连续编号,最大编号不会超过10。),是已知小圈子的个数。随后Q行,每行给出一对被查询的人的编号。
2024-12-06 21:40:37
281
原创 L2-023 图着色问题 (内含注意事项!!!)
输入在第一行给出3个整数V(0<V≤500)、E(≥0)和K(0<K≤V),分别是无向图的顶点数、边数、以及颜色数。随后E行,每行给出一条边的两个端点的编号。在图的信息给出之后,给出了一个正整数N(≤20),是待检查的颜色分配方案的个数。随后N行,每行顺次给出V个顶点的颜色(第i个数字表示第i个顶点的颜色),数字间以空格分隔。但本题并不是要你解决这个着色问题,而是对给定的一种颜色分配,请你判断这是否是图着色问题的一个解。对每种颜色分配方案,如果是图着色问题的一个解则输出Yes,否则输出No,每句占一行。
2024-12-06 21:23:39
257
原创 L2-022 重排链表
每个输入包含1个测试用例。每个测试用例第1行给出第1个结点的地址和结点总个数,即正整数N (≤10。对每个测试用例,顺序输出重排后的结果链表,其上每个结点占一行,格式与输入相同。例如:给定L为1→2→3→4→5→6,则输出应该为6→1→5→2→4→3。Next是下一结点的地址。题目保证给出的链表上至少有两个结点。Data是该结点保存的数据,为不超过10。结点的地址是5位非负整数,NULL地址用−1表示。先用结构体将各个点连接起来,再用两个指针轮流输出。注意:当点数为奇数或者偶数,操作方式有区别。
2024-12-06 21:20:39
281
原创 L2-016 愿天下有情人都是失散多年的兄妹 分数
大家都知道五服以内不得通婚,即两个人最近的共同祖先如果在五代以内(即本人、父母、祖父母、曾祖父母、高祖父母)则不可通婚。因为bfs是按层来遍历的,所以可以将两个人看做第一层,将他们5层以内的亲戚放到队列中进行bfs,同时更新层数level[fa] = level[top] + 1。对每一对有情人,判断他们的关系是否可以通婚:如果两人是同性,输出Never Mind;如果某人的父亲或母亲已经不可考,则相应的ID位置上标记为-1。接下来给出一个正整数K,随后K行,每行给出一对有情人的ID,其间以空格分隔。
2024-12-05 21:37:24
289
原创 L2-013 红色警报 L2-014 列车调度
思路: 计算这个点删除前后,集合数量是否相同算法1: 并查集来统计集合数量算法二:dfs遍历这个图,来统计集合数量。
2024-12-05 17:43:33
169
原创 最长且连续的对称子串
遇到关于那些 有相同特征的人放一块的问题,不要立即就想用并查集来做,想想有没有别的简单方法来表示元素之间的关系;解法二 :暴力枚举所有子串,再暴力判断是否对称(On3);解法一:O(n2)(动态规划)
2024-12-04 20:44:41
136
原创 史上最全vector常用函数讲解以及binary_search,lower_bound,upper_bound讲解(全是干货!!!)
(vector v)第二种:删除区间元素7.reverse(翻转)8.unique(删除重复元素)
2024-12-03 21:35:03
373
原创 pat团体程序设计天梯赛题目精讲以及知识点总结
L2-001紧急救援(链接:https://blog.youkuaiyun.com/wykwasd75869/article/details/144101854?思路:设一个path[]数组,记录这个点的前驱节点是谁,一般是当当前的点被更新时,就更新path点。
2024-12-03 20:49:52
442
原创 线性dp以及区间合并详解
cnt表示走到这个点为止,与右区间抵消后的左区间还剩多少,如果是0,那么抵消之前是0,那么一定是答案区间的左端点,如果抵消之后是0,那么是右端点。如代码所示,这是一段求最长回文串的代码(注意最长回文串在原串中不一定是连续的)区间dp:给定若干个闭区间,求最少多少个闭区间能够刚好囊括所有给出的闭区间。解法二:合并区间,当需要开新区间时,就输出之前的begin和end。例如 线性dp中,如果只有一个序列,就靠当前序列i与i-1。把情况列完一般状态转移方程就出来了;如果有两个序列,就考虑a[i]和b。
2024-12-01 11:16:27
187
原创 DP问题的深入思考
线性DP:dp[n]代表前n个数字对应的答案是多少,在草稿纸上把dp[n]和dp[n-1]的状态标注出来,然后想想后者如何转移到前者。树形DP需要建个树,写一个dfs(k)函数,搜索以k为根的子树,一个二维数组代表选或者不选。区间DP:第一层for枚举区间长度,第二层枚举区间左端点,第三层从左端点枚举到右端点。今天把算法基础课的dp问题又全部过了一遍,打算连续练习一周的dp问题。整数划分问题可以看做是背包问题(当前大数可以有小数组成的方案数)数位统计类DP和昨天的思路一样。
2024-11-26 23:13:22
164
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人