算法 模版

cin cout加快讀取速度:

ios::sync_with_stdio(false);

高精度*高精度

vector<int> mul(vector<int>& a, vector<int>& b) {vector<int>c(b.size()+a.size()+5,0);for (int i = 0; i < a.size(); i++) {for (int j = 0; j < b.size(); j++) {c[i + j] += a[i] * b[j];}}for (int i = 0; i < c.size(); i++) {if (c[i] > 9) {c[i + 1] += c[i] / 10;c[i] = c[i] % 10;}}while (c.size() > 1 && c.back() == 0)c.pop_back();return c;
}

高精度+高精度

vector<int> add(vector<int> &A, vector<int> &B)
{if (A.size() < B.size()) return add(B, A);vector<int> C;int t = 0;for (int i = 0; i < A.size(); i ++ ){t += A[i];if (i < B.size()) t += B[i];C.push_back(t % 10);t /= 10;}if (t) C.push_back(t);return C;
}

二分:

bool check(int x) {/* ... */} // 檢查x是否滿足某種性質// 求右邊界時用,滿足右區間性質為true
int bsearch_1(int l, int r)
{while (l < r){int mid = l + r >> 1;if (check(mid)) r = mid;    // check()判斷mid是否滿足性質else l = mid + 1;}return l;
}
// 求左邊界時用,滿足左區間性質為true
int bsearch_2(int l, int r)
{while (l < r){int mid = l + r + 1 >> 1;if (check(mid)) l = mid;else r = mid - 1;}return l;
}

int res=upper_bound(num,num+n,q)-num;

int res=lower_bound(num,num+n,q)-num;

upper尋找第一個大于q的數的地址,lower尋找第一個大于等于q的數的地址。在"algorithm"庫中。

?滑動窗口:

//進窗口
......
//處理結果
......
//出窗口
......

動態規劃:

  1. 確定dp數組(dp table)以及下標的含義
  2. 確定遞推公式
  3. dp數組如何初始化
  4. 確定遍歷順序
  5. 舉例推導dp數組
  • 01背包:物品只有一個。dp[i][j]從前i個物品中選,容量為j時選擇的最大價值是dp[i][j]。

?dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);區別就是對i物品選與不選。

  • 完全背包:每個物品無數個。dp[i][j]定義一樣。

dp[i][j]=max(dp[i - 1][j], dp[i][j - weight[i]] + value[i]);

兩者在選擇i物品上有區別,

dfs:

深搜三步曲:

1.確定遞歸函數,參數

2。確認終止條件

3.處理目前搜索節點出發的路徑

void dfs(參數) {if (終止條件) {存放結果;return;}for (選擇:本節點所連接的其他節點) {處理節點;dfs(圖,選擇的節點); // 遞歸回溯,撤銷處理結果}
}

bfs:

int dir[4][2] = {0, 1, 1, 0, -1, 0, 0, -1}; // 表示四個方向
// grid 是地圖,也就是一個二維數組
// visited標記訪問過的節點,不要重復訪問
// x,y 表示開始搜索節點的下標
void bfs(vector<vector<char>>& grid, vector<vector<bool>>& visited, int x, int y) {queue<pair<int, int>> que; // 定義隊列que.push({x, y}); // 起始節點加入隊列visited[x][y] = true; // 只要加入隊列,立刻標記為訪問過的節點while(!que.empty()) { // 開始遍歷隊列里的元素pair<int ,int> cur = que.front(); que.pop(); // 從隊列取元素int curx = cur.first;int cury = cur.second; // 當前節點坐標for (int i = 0; i < 4; i++) { // 開始想當前節點的四個方向左右上下去遍歷int nextx = curx + dir[i][0];int nexty = cury + dir[i][1]; // 獲取周邊四個方向的坐標if (nextx < 0 || nextx >= grid.size() || nexty < 0 || nexty >= grid[0].size()) continue;  // 坐標越界了,直接跳過if (!visited[nextx][nexty]) { // 如果節點沒被訪問過que.push({nextx, nexty});  // 隊列添加該節點為下一輪要遍歷的節點visited[nextx][nexty] = true; // 只要加入隊列立刻標記,避免重復訪問}}}}

快排:

void quick_sort(int q[], int l, int r)
{if (l >= r) return;int i = l - 1, j = r + 1, x = q[l + r >> 1];while (i < j){do i ++ ; while (q[i] < x);do j -- ; while (q[j] > x);if (i < j) swap(q[i], q[j]);}quick_sort(q, l, j), quick_sort(q, j + 1, r);
}

歸并排序:

void merge_sort(int q[], int l, int r) {if (l >= r)return;int mid = l + r >> 1;merge_sort(q, l, mid);merge_sort(q, mid + 1, r);int k = 0, i = l, j = mid+1;while (i <= mid && j <= r) {if (q[i] <= q[j])tmp[k++] = q[i++];else tmp[k++] = q[j++];}while (i <= mid) { tmp[k++] = q[i++]; }while (j <= r) { tmp[k++] = q[j++]; }for (int i = l,j=0;i<=r;i++,j++) q[i] = tmp[j];
}

前綴與差分:

a[n]是b[n]的前綴和數組,b[n]是a[n]的差分數組。

a[n]=b[1]+b[2]+...+b[n]。b[n]=a[n]-a[n-1]。

如果對a數組l到r均+c,那么只需對b數組b[l]+c,b[r+1]-c。

如果求b數組從l到r的和,那么只需查詢a[r]-a[l]。

并查集:

1.將兩個元素添加到同一個集合中。

2.判斷兩個元素在不在同一個集合中。

int n = 1005; // n根據題目中節點數量而定,一般比節點數量大一點就好
vector<int> father = vector<int> (n, 0); // C++里的一種數組結構// 并查集初始化
void init() {for (int i = 0; i < n; ++i) {father[i] = i;}
}
// 并查集里尋根的過程
int find(int u) {if (u == father[u]) return u;else return father[u] = find(father[u]); // 路徑壓縮
}
// 判斷 u 和 v是否找到同一個根
bool isSame(int u, int v) {u = find(u);v = find(v);return u == v;
}// 將v->u 這條邊加入并查集
void join(int u, int v) {u = find(u); // 尋找u的根v = find(v); // 尋找v的根if (u == v) return ; // 如果發現根相同,則說明在一個集合,不用兩個節點相連直接返回father[v] = u;
}

最小生成樹:

prim三部曲:

1.選距離生成樹最近節點

2.最近節點加入生成樹

3.更新非生成樹節點到生成樹的距離(即更新minDist數組)

Kruskal算法:

思路:邊的權值排序,因為要優先選最小的邊加入到生成樹里。

遍歷排序后的邊,如果邊收尾的兩個節點在同一個集合中,說明如果連上這條邊圖中會出現環;如果邊首尾的兩個節點不在同一個集合,加入到最小生成樹,并把兩個節點加入同一個集合

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/76337.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/76337.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/76337.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

4185 費馬小定理求逆元

4185 費馬小定理求逆元 ??難度&#xff1a;簡單 &#x1f31f;考點&#xff1a;費馬小定理 &#x1f4d6; &#x1f4da; import java.util.Scanner; import java.util.Arrays;public class Main {static int[][] a;public static void main(String[] args) {Scanner sc …

【SQL】常見SQL 行列轉換的方法匯總 - 精華版

【SQL】常見SQL 行列轉換的方法匯總 - 精華版 一、引言二、SQL常見的行列轉換對比1. 行轉列 Pivoting1.1 ??CASE WHEN 聚合函數??1.2 ??IF 聚合函數??1.3 ??PIVOT操作符?? 2.列轉行 Unpivoting2.1 UNION ALL??2.2 ??EXPLODE函數&#xff08;Hive/Spark&#…

操作系統 4.3-生磁盤的使用

磁盤的物理組成 盤面&#xff1a; 磁盤由多個盤面組成&#xff0c;每個盤面上都有數據存儲的區域。 磁道&#xff1a; 每個盤面上都有若干個同心圓&#xff0c;這些同心圓稱為磁道。磁道是數據存儲的路徑。 扇區&#xff1a; 磁道被進一步劃分為若干個扇區&#xff0c;扇區…

PT抽ETM如何包含power信息

在primetime中&#xff0c;可以使用extract_model -power指令使ETM包含power的信息。需要注意的是&#xff0c;需要先設置set power_enable_analysis為true。 例如得到有power信息的ETM指令如下&#xff08;示例&#xff09;&#xff1a; set power_enable_analysis true ex…

Linux服務器網卡深度解析:從ifconfig輸出到生產環境性能調優實戰

Linux服務器網卡深度解析&#xff1a;從ifconfig輸出到生產環境性能調優實戰 Linux服務器網卡深度解析&#xff1a;從ifconfig輸出到生產環境性能調優實戰一、背景二、生產環境的服務器部署情況三、拆解一個真實的 ifconfig 輸出1、先看 MAC 地址2、再看設備的 interrupt 和 me…

996引擎-源碼學習:PureMVC Lua 中的 Facade 類

996引擎-源碼學習:PureMVC Lua 中的 Facade 類 1. 核心概念1.1 外觀模式1.2 多例模式2. 關鍵組件NotificationController:ModelView3. 主要功能4. 初始化流程5. 通信機制6. 生命周期管理1. Facade 初始化流程圖2. 發送通知時序圖中介者 PlayerBestRingLayerMediatorOpenLayer …

鏈式多分支規則樹模型的應用

目錄 開始調用 初始化 歡迎關注我的博客&#xff01;26屆java選手&#xff0c;一起加油&#x1f498;&#x1f4a6;&#x1f468;?&#x1f393;&#x1f604;&#x1f602; 引入 最近在學習一個項目中的鏈式多分枝規則樹模型的使用&#xff0c;模型如下&#xff1a; 如圖所…

GitLab之搭建(Building GitLab)

GitLab之搭建 “ 在企業開發過程中&#xff0c;GitLab憑借其強大的版本管理、CI/CD集成和項目管理功能&#xff0c;成為許多團隊的首選工具。本文將探討GitLab的基礎介紹、搭建過程、權限管理、代碼審查以及團隊知識管理等方面。通過詳細的步驟和實用的技巧&#xff0c;旨在幫…

藍橋杯 小藍的操作(一維差分)

問題描述 一個數組 aa 中共包含 nn 個數&#xff0c;問最少多少次操作&#xff0c;可以讓 aa 數組所有數都變成 11 。 操作的內容是&#xff1a;每次操作可以任選一個區間使得區間內的所有數字減 11 。 數據保證一定有解。 輸入格式 第一行一個整數 nn 表示有 nn 個整數。 …

C# net CMS相關開源軟件 技術選型 可行性分析

C# net CMS相關開源軟件 技術選型 可行性分析 OrchardCMS(微軟主導) https://github.com/OrchardCMS/OrchardCore https://docs.orchardcore.net/en/latest/ BSD Umbraco-CMS&#xff08;丹麥&#xff09; https://github.com/umbraco/Umbraco-CMS https://docs.umbraco.com/…

程序化廣告行業(77/89):融資、并購與上市全景洞察

程序化廣告行業&#xff08;77/89&#xff09;&#xff1a;融資、并購與上市全景洞察 大家好呀&#xff01;一直以來&#xff0c;我都希望能和大家一起在技術知識的海洋里暢游、學習進步。前面我們已經了解了程序化廣告行業的發展態勢、PC端和移動端投放差異以及行業融資的大致…

【解決方法】VMware 此平臺不支持虛擬化Intel VT-x/EPT

目錄 1. 引言2. 問題描述3. 解決方法3.1 方法一&#xff08;臨時&#xff09;3.2 方法二&#xff08;此方法非常離譜&#xff0c;永久有效&#xff09; 4. &#x1f911;鼓勵一下5. 求關注6. 我的其他文章推薦 1. 引言 收集同學們遇到的各種VMware安裝、使用過程中遇到的問題&a…

項目學習總結001

1. 策略模式和工廠模式 https://mp.weixin.qq.com/s/RG-h7r69JyKUlBZylJJIFQ 在軟件開發中也常常遇到類似的情況&#xff0c;實現某一個功能有多個途徑&#xff0c;此時可以使用一種設計模式來使得系統可以靈活地選擇解決途徑&#xff0c;也能夠方便地增加新的解決途徑。這就是…

OpenHarmony 5.0版本視頻硬件編解碼適配

一、簡介 Codec HDI&#xff08;Hardware Device Interface&#xff09;對上層媒體服務提供視頻編解碼的驅動能力接口&#xff0c;主要功能有獲取組件編解碼能力&#xff0c;創建、銷毀編解碼器對象&#xff0c;啟停編解碼器操作&#xff0c;編解碼處理等。 Codec HDI 2.0接口…

深度解析基于 Web Search MCP的Deep Research 實現邏輯

寫在前面 大型語言模型(LLM)已成為我們獲取信息、生成內容的重要工具。但它們的知識大多截止于訓練數據的時間點,對于需要實時信息、跨領域知識整合、多角度觀點比較的深度研究 (Deep Research) 任務,它們往往力有不逮。如何讓 LLM 突破自身知識的局限,像人類研究員一樣,…

鴻蒙案例---生肖抽卡

案例源碼&#xff1a; Zodiac_cards: 鴻蒙生肖抽獎卡片 效果演示 初始布局 1. Badge 角標組件 此處為語雀內容卡片&#xff0c;點擊鏈接查看&#xff1a;https://www.yuque.com/kevin-nzthp/lvl039/rccg0o4pkp3v6nua 2. Grid 布局 // 定義接口 interface ImageCount {url:…

基于RV1126開發板實現自學習圖像分類方案

1. 方案簡介 自學習&#xff1a;在識別前對物體圖片進行模型學習&#xff0c;訓練完成后通過算法分類得出圖像的模型ID。 方案設計邏輯流程圖&#xff0c;方案代碼分為分為兩個業務流程&#xff0c;主體代碼負責抓取、合成圖像&#xff0c;算法代碼負責訓練和檢測功能。 2. 快速…

cat命令查看文件行數

在Linux和Unix-like操作系統中&#xff0c;cat命令主要用于查看文件內容&#xff0c;而不是直接用來查看文件行數。如果你想要查看一個文件的行數&#xff0c;可以使用以下幾種方法&#xff1a; 方法1&#xff1a;使用wc命令 wc&#xff08;word count&#xff09;命令可以用…

git清理已經刪除的遠程分支

目錄 命令作用 使用場景 示例流程 注意事項 常見問題 git remote update origin --prune git remote update origin --prune 是一個 Git 命令&#xff0c;用于 更新本地遠程跟蹤分支 并 清理&#xff08;刪除&#xff09;本地已失效的遠程分支引用。以下是詳細分解&#…

NLP高頻面試題(四十)——什么是 BitFit?

BitFit(Bias-term Fine-tuning)是一種參數高效的微調方法,專注于在預訓練模型中僅調整偏置項(bias term),而將其他參數保持不變。這種方法在自然語言處理領域,尤其是在中小規模數據集上,展現出了與全量微調相媲美的性能,同時顯著減少了計算資源的消耗。 什么是 BitFi…