- 博客(63)
- 收藏
- 关注
原创 邻接矩阵,邻接表,链式前向星
本质:用一个V×V的二维数组(矩阵)表示,matrix[i][j]的值表示顶点i和j之间是否有边(无权图:1 = 有边,0 = 无边;带权图:存储权重,无边则用∞/0 表示)。本质:为每个顶点单独维护一个列表,只存储该顶点实际相连的邻接顶点(无需存储 “无边” 的情况)。// 链式前向星(可以解决前面两个) (不学就看情况用1或2) (学就无脑套) (反正我不会)// 邻接表(n个链表构成)(可以用vector实现链表)(无向图的邻接矩阵是对称矩阵,有向图则不一定)一、核心区别:存储结构的本质不同。
2026-03-08 14:05:10
27
原创 dijkstra算法
起点 $a$ 能到 $b$ (距离 2) 和 $c$ (距离 5)。此时,算法会以这个新变绿的点为跳板,去更新(松弛)它能到达的其他邻居的距离。既然当前这个绿色的值是所有候选项里最小的,那么如果你尝试通过别的、还没确定的点绕路回来,路径值只会越加越大(因为边权是正的),绝对不会比现在的绿色值更小。此时剩下 $c$ (距离 3)、$d$ (距离 5)、$f$ (距离 $\infty$)。最小的是 $c$,所以 $c$ 变绿。通过 $b$ 可以去 $c$(距离变为 $2+1=3$),这比之前的距离 5 更短。
2026-03-08 11:33:04
171
原创 dfs全排列和全组合问题
(2)如果没有够的话,比如我们先选1,判断1还没到两个数就应该进入下一层dfs(因为判断是在DFS的前面的用于返回,所以你应该进入下一层DFS,而不是直接记录for循环里面的i加加后的2),又因为要大于一,所以你应该把二传下去,还有cnt传下去,所以我们现在DFS为(int cnt,int start)进入(2,2)的时候,因为我们一开始说了for循环从一到n开始,现在发现我们有漏洞,我们要从start开始。(1)判断如果如果够了,你需要打印之前记录下来的数,并且返回,以上是我的完整思路。
2026-02-12 20:28:25
252
原创 我的寒假假期学习顺序
排序进化论:你掌握了 $O(n^2)$ 到 $O(n \log n)$ 的跨越。包括快速排序(基准划分)、归并排序(分治合并) 和结构体排序(多维数据处理)。二分法:包括用于查找的二分搜索和用于最优化问题的二分答案(如 P2678 跳石头)。进阶线性:掌握了单调栈,用于 $O(n)$ 解决“下一个更大元素”及积水建模问题。并查集 (DSU):实现高效的集合合并与查询,采用了路径压缩优化。Dijkstra:配合**优先队列(堆)**优化的单源最短路。线性表:从基础的栈与队列 到支持双向操作的双向链表。
2026-02-09 22:39:09
116
原创 一招教会你什么时候用.访问什么时候用->访问
语法场景遍历方式it 的身份访问方式基于范围的 for引用(本体)it.first迭代器 for迭代器(类似指针)it->first指针变量指针(地址)
2026-02-09 22:15:11
380
1
原创 关闭同步流
功能等价性:这三组代码的核心效果完全一致 —— 关闭 cin/cout 与 C 标准 IO 的同步,解绑 cin 和 cout,最终加速输入输出;写法差异:只是 “布尔值 / 数值”“不同空指针” 的形式区别,无功能差异;关键注意点:使用这些代码后,不要混合使用 cin/cout 和 printf/scanf(可能导致输出顺序混乱),这是唯一需要注意的坑。要记得加因为endl会开启同步流。
2026-01-26 11:10:26
318
原创 数据结构学习笔记
标准库std::vector(动态大小) / std::list(双向链表)/std::forward_list(单向链表)。"栈""普通二叉树""二叉搜索树(BST)"标准库std::map/std::set底层是红黑树,可直接使用。"堆""三、 图形结构"
2026-01-25 21:14:45
359
原创 menset的使用方法
填充值单字节类型(char)多字节类型(int/long long)能否用 memset 填充0结果为 0(正确)结果为 0(正确)✅ 可以1结果为 1(正确)结果为 0x01010101(错误)❌ 不可以-1结果为 - 1(正确)结果为 - 1(正确)✅ 可以memset只适合填充「所有字节都相同」的值,只有0和-1满足这个条件(0 是全 0,-1 是全 1),其他值(如 1、2、100)的多字节拼接结果都不符合预期。对你的代码场景来说,只需要用memset。
2026-01-25 21:10:04
870
原创 study in 豆包(怎么用string判断字符串大小)(2025.12.7)
绝大多数场景直接使用==等运算符即可,遵循字典序规则;特殊需求(忽略大小写、按长度、中文排序)需手动实现比较逻辑;注意字符编码(如 ASCII 与 Unicode)对比较结果的影响。
2025-12-07 12:19:56
435
原创 study in 洛谷(floor与ceil与精度丢失)(2025.12.5)
开始我想说看题很重要比如a 为实数,t 为正整数其中 ⌊k⌋ 表示实数 k 的整数部分。ti×ai 的最大值不超过 2000000。
2025-12-05 16:16:12
427
原创 study in PTA(高精度算法与预处理)(2025.12.3)
才知道(因为long long只有19位的数字,而这个数据是十万零一位数字,long long已经无法满足数据要求)要用高精度算法,又为了避免运行超时所以使用了预处理。
2025-12-03 22:42:10
307
原创 study in Dev-c++(string insert基本用法和其他函数用法)(2025.12.2)
ch.insert(位置,字符串);ch.insert(位置,1,字符);
2025-12-02 22:15:12
283
原创 study in pta + 豆包(求区间和)(前缀和算法)(如何处理zhan栈溢出和超出时间复杂度问题)(2025.12.2)
数学里的模运算,核心是找到一个非负整数 r存在整数 q(商),使得被除数 = 除数 × q + r;0 ≤ r < 除数。对于,除数是10000019,且。→。这个 r=10000014 才是数学意义上的 “正确模结果”,因为它满足 “非负且小于除数”。题目要的是 “数学模结果”(非负、小于除数);C++ 的是 “求余运算”,结果可能为负;abs只能解决 “符号”,解决不了 “结果必须小于除数”,所以错误;正确做法是(差值 + MOD) % MOD。
2025-12-02 11:35:59
625
原创 study in 牛客网(C++中cout对不同类型的输出规则)(2025.11.30)
【study in 豆包(指针两个重要符号应用)(& *)(二级指针)(2025.11.19) - CSDN App】https://blog.csdn.net/curry____303/article/details/155014787?
2025-11-30 13:08:01
93
原创 study in ai(vector的两种输入)(2025.11.26)
② 通过 cin >> vitamins[i] 直接修改第i个位置的元素值,最终vector大小为n,包含输入的n个数据。① 创建vector时 指定初始容量n,内存中已分配n个int大小的空间,每个元素初始为0(可通过下标直接访问)。此时功能与第一种代码一致:最终vector大小为n,包含输入的n个数据。第一种代码:正确初始化并输入。第二种写法(修正后)
2025-11-26 11:31:36
193
原创 study in pta(零基础学会DFS)(2025.11.25)
include <iostream> #include <vector> // 使用 std::vector 来创建一个二维记忆数组 std::vector<std::vector<int>> memo;} else { // 递归关系 result = dp(n - m, m) + dp(n, m - 1);// 初始化记忆数组,大小为 (n+1) x (m+1),并用 -1 填充,表示未计算 memo.resize(n + 1, std::vector<int>(m + 1, -1));
2025-11-25 13:27:56
338
原创 基本算法(2025.11.21)(会不断更新可以收藏一下)
还有要注意要先拿一个数储存gcd(最大公约数)不然后面可能gcd会变。(1)递归(建议写这个)分为递归写法和迭代写法。
2025-11-21 22:46:52
289
原创 study in 牛客网(牛客网递归题目)(2025.11.21)
N=16 时,最多查 4 次,以此类推。要判断算法的时间复杂度,我们可以从算法的执行流程、循环/递归的次数入手,核心是分析“随着数据规模 N 增长,操作次数的增长趋势”。又因为我们知道调用一次后面会调用两次(eg:f(17)=f(14)+f(12)),所以是1(即f(17))+2+4+8 +8+16。- 假设数组长度为 N ,第一次查找区间长度是 N ,第二次是 N/2 ,第三次是 N/4 ……- 若操作次数是 N \times \log N 级,是 O(N \log N)。
2025-11-21 15:41:30
274
原创 study in pta(吉老师的回归)(亚特兰蒂斯之谜)(学会用find找string中的字符片段)(2025.11.19与2025.11.25持续更新)
string 类的 find(const string& substr) 成员函数会返回子串 substr 在原字符串中首次出现的起始索引(类型为 size_t)。cout << "子串存在,起始位置:" << pos << endl;// 输出:子串存在,起始位置:7。size_t 是无符号整数类型,若直接用 if (pos == -1) 判断会出错(需用 string::npos)。区分大小写(如 "World" 与 "world" 视为不同子串)。cout << "子串不存在" << endl;
2025-11-19 13:48:22
326
原创 study in 洛谷(隐式转换)(2025.11.18)
3.14` 是 `double` 类型,`r` 和 `h` 是 `int` 类型。`3.14*r*r*h` 结果为 `double`(如 `8738.62`),`20000` 隐式转换为 `double`,除法结果为 `double`(如 `20000/8738.62≈2.288`)。- **赋值阶段**:`double` 结果赋值给 `int v` 时,C++ 规定 **不允许隐式转换为更“窄”的类型**(`double` → `int` 可能丢失精度),必须显式截断(直接丢弃小数)。
2025-11-18 13:15:20
724
原创 study in pta(水仙花数string用法)(2025.11.12)
*ASCII** 的全称是 **American Standard Code for Information Interchange**(美国信息交换标准代码)。- 它是基于拉丁字母的一套电脑编码系统,用于表示文本信息,包含 **128个字符**(0-127),涵盖英文字母、数字、标点符号及控制字符。- 在C++中,字符类型(如 `char`)本质上存储的就是ASCII码值,例如 `'A'` 的ASCII码为65,`'0'` 为48。### **C++中ASCII码的全称**(1)不用string。
2025-11-12 11:04:15
388
原创 study in pta(连续数字中最大素数)(2025.11.10)
最致命的错误就是把maxPrime 的初始化放在循环里面了。就是我isPrime函数循环条件少了一个等于号。但还有一个错误导致我10以内的测试点错了。这里我只有4分满分15的。
2025-11-10 13:00:35
206
原创 study in pta(string与通用头文件应用)(2025.11.3)
while部分逻辑错误了,导致一直卡在while不出来超时了。这一段运用万能头文件加上string,简洁又轻松。3.我的最终修改(完全体)这一段依然用的是char。
2025-11-03 12:13:11
180
原创 study in pta(防止整数溢出)(2025/10/31)
+i) { // 逐步计算:分子乘 (n - m + i),分母乘 i,避免大阶乘 result = result * (n - m + i) / i;} 为什么这个可以算组合数。// 确保 m 是较小的那个(组合数对称性:C(n,m)=C(n,n-m)) if (m > n - m) { m = n - m;豆包点评:你的代码在计算组合数 C(n,m) 时,当 m=n/2(即 n=2m)出现错误,很可能是由于。,尤其是当 n 较大时(例如 n≥21),即使改用。可以缓解整数溢出问题,但。
2025-10-31 15:23:39
234
原创 study in pta(基本语法综合运用)(2025.10.24)
我自己也知道逻辑有问题但确实写不下去了。写到这里一直检查不出什么错误问了豆包。
2025-10-24 17:20:59
206
原创 study in 洛谷(结构体的基本应用)(2025.10.23)
这题我看到就想起了结构体,但因为还没学过,我就让豆包先生成了一个,看完再自己完整写。
2025-10-23 13:29:22
134
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅