From 2418bcb75ac866a920cb282941f6757fc355f4b4 Mon Sep 17 00:00:00 2001 From: handsomezhuzhu <2658601135@qq.com> Date: Thu, 15 Jan 2026 02:44:18 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E7=BB=93=E6=9E=84=E5=AE=9E?= =?UTF-8?q?=E9=AA=8C=E7=AC=94=E8=AE=B0+=E6=96=87=E7=AB=A0=E6=8E=92?= =?UTF-8?q?=E5=BA=8F=E6=95=B4=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/sop/maindocs/ai-role-play-sequel.md | 2 +- ...kchain-web3-virtual-currency-stablecoin.md | 2 +- docs/sop/maindocs/esa.md | 1 + docs/sop/maindocs/fanghua.md | 4 +- docs/sop/maindocs/jipaige-and-lanzhanfei.md | 1 + docs/sop/notes/acm-cpp-cheatsheet.md | 398 ++++++++++++++++++ docs/sop/notes/mayuan-notes.md | 1 + .../sop/notes/probability-statistics-notes.md | 1 + .../sop/tutorial/gemini-bing-points-script.md | 2 +- 9 files changed, 407 insertions(+), 5 deletions(-) create mode 100644 docs/sop/notes/acm-cpp-cheatsheet.md diff --git a/docs/sop/maindocs/ai-role-play-sequel.md b/docs/sop/maindocs/ai-role-play-sequel.md index 6c5e0f5..5a38e51 100644 --- a/docs/sop/maindocs/ai-role-play-sequel.md +++ b/docs/sop/maindocs/ai-role-play-sequel.md @@ -1,6 +1,6 @@ --- title: 从酒馆到小手机:AI角色扮演的次世代进化 # 文章标题,支持副标题格式(用 - 分隔) -top: 1 # 置顶级别:1-3,数字越大越靠前,0表示不置顶 +top: 0 # 置顶级别:1-3,数字越大越靠前,0表示不置顶 date: 2025-12-12 18:00:00 # 发布日期和时间,格式:YYYY-MM-DD HH:MM:SS descriptionHTML: ' 剧情聊天2.0时代 diff --git a/docs/sop/maindocs/blockchain-web3-virtual-currency-stablecoin.md b/docs/sop/maindocs/blockchain-web3-virtual-currency-stablecoin.md index 1abf0a1..57eb25d 100644 --- a/docs/sop/maindocs/blockchain-web3-virtual-currency-stablecoin.md +++ b/docs/sop/maindocs/blockchain-web3-virtual-currency-stablecoin.md @@ -15,7 +15,7 @@ hiddenCover: false sticky: 50 hidden: false recommend: true -publish: true +publish: false --- # 区块链、Web3、代币、虚拟币、稳定币 diff --git a/docs/sop/maindocs/esa.md b/docs/sop/maindocs/esa.md index ec48279..f0b382f 100644 --- a/docs/sop/maindocs/esa.md +++ b/docs/sop/maindocs/esa.md @@ -13,6 +13,7 @@ cover: url sticky: 0 hidden: false recommend: true +publish: false --- # 阿里ESA比其他CDN好在哪 diff --git a/docs/sop/maindocs/fanghua.md b/docs/sop/maindocs/fanghua.md index 1e0c533..adb9e75 100644 --- a/docs/sop/maindocs/fanghua.md +++ b/docs/sop/maindocs/fanghua.md @@ -1,6 +1,6 @@ --- title: 解读B站UP主《芳华》的解读 -top: 1 +top: 0 date: 2025-12-06 13:25:00 descriptionHTML: ' “网左大本营”的成因与发展 @@ -13,7 +13,7 @@ sidebar: true readingTime: true hiddenCover: true cover: url -sticky: 100 +sticky: 10 hidden: false recommend: true --- diff --git a/docs/sop/maindocs/jipaige-and-lanzhanfei.md b/docs/sop/maindocs/jipaige-and-lanzhanfei.md index ed933af..e3554ef 100644 --- a/docs/sop/maindocs/jipaige-and-lanzhanfei.md +++ b/docs/sop/maindocs/jipaige-and-lanzhanfei.md @@ -13,6 +13,7 @@ hiddenCover: false sticky: 0 # 精选文章设置:值越大在首页展示越靠前,0表示不精选 hidden: false # 是否隐藏文章:true隐藏(模板用),false显示(正式文章用) recommend: true +publish: false --- # 快速聊聊鸡排哥和蓝战非 diff --git a/docs/sop/notes/acm-cpp-cheatsheet.md b/docs/sop/notes/acm-cpp-cheatsheet.md new file mode 100644 index 0000000..71be44b --- /dev/null +++ b/docs/sop/notes/acm-cpp-cheatsheet.md @@ -0,0 +1,398 @@ +--- +title: 数据结构与算法实验 ACM模式备忘录 (C++) +date: 2026-01-15 +descriptionHTML: '整理了ACM赛制/数据结构考试中常用的C++模板与算法讲解' +tags: + - 笔记 + - C++ + - 算法 +sidebar: true +readingTime: true +hidden: false +recommend: true +--- + +# 数据结构与算法实验 备忘录 (C++) + +这份笔记整理了ACM赛制/数据结构考试中常用的C++模板与算法讲解。 + +## 1. 基础环境 (Template) + +```cpp +#include +#include +#include +#include +#include +#include +#include // for greater +using namespace std; + +typedef long long ll; +const int INF = 0x3f3f3f3f; + +int main() { + // 核心:关闭同步,加速cin/cout + ios::sync_with_stdio(false); + cin.tie(0); cout.tie(0); + + // 在这里写你的代码 + return 0; +} +``` + +--- + +## 2. 基础数据结构与 STL + +### 2.1 指针与引用 (Pointers & References) +**这是很多同学容易混淆的地方,尤其是在函数传参时。** + +#### 1. 如何定义 +```cpp +int a = 10; +int* p = &a; // p 是指针,存储 a 的地址 +int& r = a; // r 是引用,r 就是 a 的别名 (即 r 和 a 是同一个东西) +``` + +#### 2. 函数传参:值传递 vs 引用传递 vs 指针传递 +**场景**:你需要在一个函数里修改外面的变量,或者传递大数组不希望发生拷贝。 + +**A. 引用传递 (`Type& name`) —— 最推荐** +如果函数参数里写了 `&`,你在函数里**直接把它当成普通变量用**就行。 +```cpp +// 这里的 x 就是外面传进来的那个变量的“分身” +void modify(int& x) { + x = 100; // 不需要加 *,直接修改 +} + +int main() { + int num = 0; + modify(num); // num 变成 100 +} +``` + +**B. 指针传递 (`Type* name`)** +需要传地址,函数里要用 `*` 解引用。 +```cpp +void modifyPtr(int* p) { + if (p == NULL) return; + *p = 100; // *p 代表指针指向的那个变量 +} + +int main() { + int num = 0; + modifyPtr(&num); // 注意:要取地址符 & +} +``` + +**总结**: +* 看到 `void func(int &x)` -> 内部直接用 `x`,改变会影响外面。 +* 看到 `void func(int *x)` -> 内部用 `*x` 访问值,调用时传地址 `&a`。 +* 链表/树结构通常用指针 (`ListNode*`),因为可能为空 (`NULL`)。 + +### 2.2 常用 STL 容器 +**Stack (栈)**: 先进后出 (LIFO),用于括号匹配、DFS。 +```cpp +stack s; +s.push(1); s.pop(); s.top(); s.empty(); +``` + +**Queue (队列)**: 先进先出 (FIFO),用于BFS、层序遍历。 +```cpp +queue q; +q.push(1); q.pop(); q.front(); q.empty(); +``` + +**Vector (动态数组)**: +```cpp +vector v; +v.push_back(1); +sort(v.begin(), v.end()); +v.erase(unique(v.begin(), v.end()), v.end()); // 排序后去重 +``` + +**Priority Queue (优先队列)**: 默认大根堆。 +```cpp +priority_queue pq; // 大根堆 +priority_queue, greater> min_pq; // 小根堆 +``` + +### 2.2 单链表 (Linked List) +**技巧**: 使用虚拟头结点 (dummy head) 处理删除操作。 + +```cpp +struct ListNode { + int val; + ListNode *next; + ListNode(int x) : val(x), next(NULL) {} +}; + +// 1. 尾插法创建 +ListNode* createList(const vector& nums) { + ListNode* dummy = new ListNode(0); + ListNode* tail = dummy; + for (int x : nums) { + tail->next = new ListNode(x); + tail = tail->next; + } + return dummy->next; +} + +// 2. 反转链表 +ListNode* reverseList(ListNode* head) { + ListNode *prev = NULL, *curr = head; + while (curr) { + ListNode* nextTemp = curr->next; + curr->next = prev; + prev = curr; + curr = nextTemp; + } + return prev; +} + +// 3. 删除指定值的节点 +ListNode* removeElements(ListNode* head, int val) { + ListNode* dummy = new ListNode(0); + dummy->next = head; + ListNode* cur = dummy; + while (cur->next) { + if (cur->next->val == val) { + ListNode* temp = cur->next; + cur->next = cur->next->next; + delete temp; + } else { + cur = cur->next; + } + } + return dummy->next; +} +``` + +--- + +## 3. 基础算法 + +### 3.1 二分查找 (Binary Search) +**适用**: 有序数组中查找。 +```cpp +// 查找第一个 >= target 的位置 +int lower_bound_custom(const vector& arr, int target) { + int l = 0, r = arr.size() - 1, ans = -1; + while (l <= r) { + int mid = l + (r - l) / 2; + if (arr[mid] >= target) { + ans = mid; + r = mid - 1; + } else { + l = mid + 1; + } + } + return ans; +} +``` + +### 3.2 快速幂 (Quick Power) +**功能**: 计算 $a^b \pmod m$。 +```cpp +ll qpow(ll a, ll b, ll m) { + ll res = 1; + a %= m; + while (b) { + if (b & 1) res = (res * a) % m; + a = (a * a) % m; + b >>= 1; + } + return res; +} +``` + +--- + +## 4. 字符串算法 + +### KMP 算法 +**功能**: 字符串匹配,求 pattern 在 text 中的位置。 +```cpp +// 求 next 数组 +vector getNext(string p) { + int m = p.size(), j = 0; + vector nxt(m); + nxt[0] = 0; + for (int i = 1; i < m; i++) { + while (j > 0 && p[i] != p[j]) j = nxt[j - 1]; + if (p[i] == p[j]) j++; + nxt[i] = j; + } + return nxt; +} + +// KMP 匹配 +int kmp(string text, string pattern) { + if (pattern.empty()) return 0; + vector nxt = getNext(pattern); + int j = 0; + for (int i = 0; i < text.size(); i++) { + while (j > 0 && text[i] != pattern[j]) j = nxt[j - 1]; + if (text[i] == pattern[j]) j++; + if (j == pattern.size()) return i - pattern.size() + 1; + } + return -1; +} +``` + +--- + +## 5. 树 (Tree) + +### 5.1 二叉树遍历 +```cpp +struct TreeNode { + int val; + TreeNode *left, *right; + TreeNode(int x) : val(x), left(NULL), right(NULL) {} +}; + +// 递归遍历 (Pre/In/Post) +void dfs(TreeNode* root) { + if (!root) return; + // cout << root->val; // 先序 + dfs(root->left); + // cout << root->val; // 中序 + dfs(root->right); + // cout << root->val; // 后序 +} + +// 层序遍历 (BFS) +void levelOrder(TreeNode* root) { + if (!root) return; + queue q; + q.push(root); + while (!q.empty()) { + TreeNode* node = q.front(); q.pop(); + cout << node->val << " "; + if (node->left) q.push(node->left); + if (node->right) q.push(node->right); + } +} +``` + +### 5.2 并查集 (Union-Find) +**功能**: 集合合并与查询。 +```cpp +int fa[10005]; +void init(int n) { for(int i=1; i<=n; i++) fa[i]=i; } +int find(int x) { return x == fa[x] ? x : fa[x] = find(fa[x]); } // 路径压缩 +void unite(int x, int y) { fa[find(x)] = find(y); } +``` + +### 5.3 树状数组 (Fenwick Tree) +**功能**: 单点修改,区间查询前缀和。 +```cpp +int bit[10005], n; +int lowbit(int x) { return x & -x; } +void add(int x, int k) { for(; x<=n; x+=lowbit(x)) bit[x]+=k; } +int query(int x) { int s=0; for(; x>0; x-=lowbit(x)) s+=bit[x]; return s; } +``` + +--- + +## 6. 图论 (Graph) + +### 6.1 存图与遍历 (Adjacency List, DFS, BFS) +```cpp +struct edge { int to, w; }; +vector> adj; // adj[u] 存 u 的出边 +vector vis; + +// DFS +void dfs(int u) { + vis[u] = true; + for (auto e : adj[u]) { + if (!vis[e.to]) dfs(e.to); + } +} + +// BFS (求无权图最短路) +void bfs(int s) { + queue q; q.push(s); vis[s] = true; + while (!q.empty()) { + int u = q.front(); q.pop(); + for (auto e : adj[u]) { + if (!vis[e.to]) { + vis[e.to] = true; + q.push(e.to); + } + } + } +} +``` + +### 6.2 最短路 Dijkstra (堆优化) +**注意**: 仅适用于非负权边。 +```cpp +vector dis; +void dijkstra(int s, int n) { + dis.assign(n + 1, INF); + dis[s] = 0; + priority_queue, vector>, greater>> pq; + pq.push({0, s}); + + while (!pq.empty()) { + int d = pq.top().first; + int u = pq.top().second; + pq.pop(); + + if (d > dis[u]) continue; + + for (auto e : adj[u]) { + if (dis[u] + e.w < dis[e.to]) { + dis[e.to] = dis[u] + e.w; + pq.push({dis[e.to], e.to}); + } + } + } +} +``` + +### 6.3 最小生成树 (Kruskal) +**原理**: 贪心,按边权从小到大选边,并查集判环。 +```cpp +struct Edge { + int u, v, w; + bool operator<(const Edge& o) const { return w < o.w; } +} edges[20005]; + +int kruskal(int n, int m) { + sort(edges, edges + m); + init(n); // 并查集初始化 + int res = 0, cnt = 0; + for (int i = 0; i < m; i++) { + if (find(edges[i].u) != find(edges[i].v)) { + unite(edges[i].u, edges[i].v); + res += edges[i].w; + cnt++; + } + } + return cnt == n - 1 ? res : -1; +} +``` + +### 6.4 拓扑排序 (Topological Sort) +**功能**: 有向无环图 (DAG) 的排序。 +```cpp +int in_degree[10005]; // 需预处理入度 +vector toposort(int n) { + queue q; + for(int i=1; i<=n; i++) if(in_degree[i]==0) q.push(i); + vector res; + while(!q.empty()){ + int u = q.front(); q.pop(); + res.push_back(u); + for(auto e : adj[u]){ + if(--in_degree[e.to] == 0) q.push(e.to); + } + } + return res; +} +``` diff --git a/docs/sop/notes/mayuan-notes.md b/docs/sop/notes/mayuan-notes.md index e0ae79c..d7e5924 100644 --- a/docs/sop/notes/mayuan-notes.md +++ b/docs/sop/notes/mayuan-notes.md @@ -10,6 +10,7 @@ sidebar: true readingTime: true hidden: false recommend: true +publish: false --- > **整理说明**: diff --git a/docs/sop/notes/probability-statistics-notes.md b/docs/sop/notes/probability-statistics-notes.md index c1ffa17..5654431 100644 --- a/docs/sop/notes/probability-statistics-notes.md +++ b/docs/sop/notes/probability-statistics-notes.md @@ -9,6 +9,7 @@ sidebar: true readingTime: true hidden: false recommend: true + --- # 概率论与数理统计笔记 diff --git a/docs/sop/tutorial/gemini-bing-points-script.md b/docs/sop/tutorial/gemini-bing-points-script.md index 8c3dffb..f544742 100644 --- a/docs/sop/tutorial/gemini-bing-points-script.md +++ b/docs/sop/tutorial/gemini-bing-points-script.md @@ -1,6 +1,6 @@ --- title: 用篡改猴脚本刷Bing搜索积分 -top: 1 +top: 0 date: 2025-08-28 11:00:00 descriptionHTML: ' 篡改猴脚本实现Bing搜索积分自动化获取,一天一块钱 😋