板子 5.29--7.19

板子 5.29–7.19

目錄

1. 樹狀數組
2. KMP
3. 矩陣快速冪
4. 數位DP
5. 狀壓枚舉子集
6. 快速冪(新版
7. priority_queue
8. dijkstra
9. 單調棧
10. debug

內容

1. 樹狀數組
// 樹狀數組  快速求前綴和 / 前綴最大值
// 維護位置數量(離散化)...// (區間加 區間求和)維護差分數組 初始化add(i,a[i]-a[i-1])
// tr1:維護d[i]的區間和。tr2:維護i?d[i]的區間和。
// 則前綴和 pre[i]=(i + 1) * tr1.ask(i) - tr2.ask(i) 區間和 pre[r]-pre[l-1]
struct Tree
{int n;vector<int> tr;Tree(int n1){n = n1 + 10;tr.assign(n, 0);}void add(int x, int v) // 加點{assert(x > 0);for (int i = x; i <= n; i += i & -i)tr[i] += v;}int ask(int x) // 前綴查詢{if (!x)return 0;int res = 0;for (int i = x; i; i -= i & -i)res += tr[i];return res;}int ask(int l, int r) // 區間查詢{r = max(1ll, r);assert(l <= r);assert(l > 0);if (l > r)return 0ll;return ask(r) - ask(l - 1);}
}; // Tree tr(n);
2. KMP
 
pair<vector<int>, vector<int>> KMP(string &s, string &t)
{vector<int> idx; // t作為子串在s中出現的下標int n = t.size(), m = s.size();string a = " " + t + "#" + s;vector<int> kmp(n + m + 10); // t的前綴t[1~i]中 t[1~i]的前綴和后綴相同的最大長度for (int i = 2; i <= n + m + 1; i++) {int j = kmp[i - 1];while (j && a[i] != a[j + 1])j = kmp[j];if (a[i] == a[j + 1])j++;kmp[i] = j;if (i > n && kmp[i] == n)idx.push_back(i - 2 * n);}return {idx, kmp};
} // auto [idx, kmp] = KMP(s, t);
3. 矩陣快速冪
struct Matrix
{int n, m;vector<vector<int>> mat;Matrix(int _n, int _m) : n(_n), m(_m), mat(_n + 1, vector<int>(_m + 1, 0)) {} // 下標從1開始// 生成單位矩陣static Matrix identity(int size){Matrix res(size, size);for (int i = 1; i <= size; i++)res[i][i] = 1;return res;}// 只讀訪問const vector<int> &operator[](int i) const { return mat[i]; }// 可寫訪問vector<int> &operator[](int i) { return mat[i]; }// 矩陣乘法Matrix operator*(const Matrix &b) const{assert(m == b.n);Matrix res(n, b.m);for (int i = 1; i <= n; i++)for (int j = 1; j <= b.m; j++)for (int k = 1; k <= m; k++){res[i][j] = (res[i][j] + mat[i][k] * b[k][j]) % mod;}return res;}// 矩陣快速冪Matrix pow(int k) const{assert(n == m);Matrix res = Matrix::identity(n);Matrix a = *this;while (k){if (k & 1)res = res * a;a = a * a;k >>= 1;}return res;}
};
4. 數位DP
void _()
{string k;int d;cin >> k >> d;int n = k.size();k = ' ' + k;vector<int> num(n + 1);for (int i = 1; i <= n; i++)num[i] = k[n - i + 1] - '0';vector<vector<array<int, 2>>> f(n + 1, vector<array<int, 2>>(110, array<int, 2>{-1, -1}));auto dfs = [&](auto &&self, int u, int pre, int lim) -> int // 1~k數位和是d的倍數的個數{if (!u){return !pre;}if (~f[u][pre][lim])return f[u][pre][lim];int maxk = lim ? num[u] : 9;int res = 0;for (int i = 0; i <= maxk; i++){res += self(self, u - 1, (pre + i) % d, lim && i == maxk);res %= mod;}return f[u][pre][lim] = res;};cout << (dfs(dfs, n, 0, 1) - 1 + mod) % mod << '\n';
}
5. 狀壓枚舉子集
void _() // 選擇狀態011001101 這些能夠形成答案的最大值  然后再考慮劃分為2個集合
{int n;cin >> n;int a[17][17] = {};for (int i = 1; i <= n; i++){for (int j = 1; j <= n; j++)cin >> a[i][j];}int mx = 1ll << n;vector<int> f(mx, -1);auto dp = [&](auto &&self, int u) -> int{if (~f[u])return f[u];f[u] = 0;for (int i = 1; i <= n; i++){for (int j = i + 1; j <= n; j++){f[u] += a[i][j] * (u >> i - 1 & 1 && u >> j - 1 & 1);}}// 子集for (int sub = u; sub = sub - 1 & u;)f[u] = max(f[u], self(self, sub) + self(self, sub ^ u));return f[u];};cout << dp(dp, mx - 1);
}
6. 快速冪(新版
constexpr int mod = 998244353;
int q_pow(int a, int b)
{if (!a)return 1ll;int res = 1;while (b){if (b & 1)res = res * a % mod; a = a * a % mod;b >>= 1;}return res;
}int fen(int u, int d)
{u %= mod, d %= mod;return u * q_pow(d, mod - 2) % mod;
}
7. priority_queue
struct Node
{int x, y;// priority_queue<Node> q;bool operator<(const Node &other) const // 大根堆{if (x - other.x)return x < other.x;elsereturn y < other.y;}// priority_queue<Node, vector<Node>, greater<>> q;bool operator>(const Node &other) const // greater<> 小根堆{if (x - other.x)return x > other.x;elsereturn y > other.y;}
};
8. dijkstra
struct Node
{int u, dis;// priority_queue<Node> q;bool operator<(const Node &other) const // 大根堆{return dis < other.dis;}// priority_queue<Node, vector<Node>, greater<>> q;bool operator>(const Node &other) const // greater<> 小根堆{return dis > other.dis;}
};
struct edge
{int v, w;
};auto dij = [&](vector<vector<edge>> &e, int s){vector<int> f(n + 1, 1e18);priority_queue<Node, vector<Node>, greater<>> q;q.push({s, 0});f[s] = 0;while (q.size()){auto [u, dis] = q.top();q.pop();if (dis > f[u])continue;for (auto [v, d] : e[u]){if (f[v] > f[u] + d){f[v] = f[u] + d;q.push({v, f[v]});}}}return f;};
9. 單調棧
// 下標    
int t = 0;vector<int> stk(n + 1);for (int i = 1; i <= n; i++){int x = a[i];for (int j = t; j >= 0; j--)if (!j)lmx[i] = -1, t = j;else if (a[stk[j]] >= x){lmx[i] = stk[j];t = j;break;}stk[++t] = i;}
10. debug
template <typename T>
void bug(initializer_list<T> list)
{cerr << "debug: ";for (const auto &elem : list)cerr << elem << ' ';cerr << endl;
}template <typename Container>
void bug(const Container &container)
{cerr << "debug: ";for (const auto &elem : container)cerr << elem << ' ';cerr << endl;
}

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

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

相關文章

min-max容斥學習筆記

最近報了航電的春季賽&#xff0c;在一道題目里面遇到了做法&#xff0c;感覺挺有意思。 考慮一個&#xff08;多重&#xff09;集合S{ai}S\{a_i\}S{ai?}&#xff0c;有如下的等式成立 min?ai∈S(ai)∑T?S,T≠?(?1)∣T∣?1max?ai∈T(ai)\min_{a_i\in S}(a_i)\sum_{T\sub…

使用帆軟制作項目

https://zhuanlan.zhihu.com/p/23429318335 項目背景 為加快大數據體系建設&#xff0c;穩步推進數字化轉型戰略&#xff0c;規范數據架構體系和數據治理體系&#xff0c;運用大數據推進全行數字化轉型建設&#xff0c;為業務發展提供創新動力&#xff0c;目標是利用金融科技和…

論C/C++的條件編譯#if、#ifdef、#ifndef、#undef

我們以實例來演示&#xff1a; ------------------------------------------實驗①------------------------------------------ 子函數&#xff1a;主函數&#xff1a;當定義了COMMENT_FLAG該宏&#xff0c;且其為0&#xff0c;則運行結果如下&#xff1a;只執行了sub_func_1函…

21、鴻蒙Harmony Next開發:組件導航(Navigation)

目錄 設置頁面顯示模式 設置標題欄模式 設置菜單欄 設置工具欄 路由操作 頁面跳轉 頁面返回 頁面替換 頁面刪除 移動頁面 參數獲取 路由攔截 單例跳轉 子頁面 頁面顯示類型 頁面生命周期 頁面監聽和查詢 頁面轉場 關閉轉場 自定義轉場 共享元素轉場 跨包…

“外賣大戰”正在改變國內“大零售”

出品 | 何璽排版 | 葉媛7月18日&#xff0c;市場監管總局約談美團、餓了么、京東三家外賣平臺&#xff0c;要求“理性競爭、規范促銷”&#xff0c;劍指近期愈演愈烈的“0元購”“0.1秒殺”等外賣補貼亂象。但約談之后&#xff0c;平臺們是真整改&#xff0c;還是玩話術&#x…

當CAN握手EtherCAT:視覺檢測系統的“雙芯合璧”時代來了

在汽車制造的高速生產線上&#xff0c;設備間的“語言不通”曾是工程師們的頭疼事&#xff1a;CAN總線像踏實的老司機&#xff0c;穩扎穩打傳輸傳感器數據&#xff1b;而EtherCAT網關則是追求極致速度的“閃電俠”&#xff0c;主導著實時控制的重任。當視覺檢測系統需要同時對接…

【C語言】動態內存管理全解析:malloc、calloc、realloc與free的正確使用

C語言學習 動態內存分配 友情鏈接&#xff1a;C語言專欄 文章目錄C語言學習前言&#xff1a;一、為什么要有動態內存分配二、malloc和free2.1 malloc2.2 free三、calloc和realloc3.1 calloc3.2 realloc總結附錄上文鏈接下文鏈接專欄前言&#xff1a; 在C語言編程中&#xff0…

基于Arduino智能家居環境監測系統—以光照強度檢測修改

2 相關技術與理論 2.1 Arduino 技術 Arduino 是一款廣受歡迎的開源電子原型平臺&#xff0c;由硬件和軟件組成&#xff0c;為開發者提供了便捷且低成本的解決方案&#xff0c;尤其適用于快速搭建交互式電子項目&#xff0c;在本智能家居環境監測系統中擔當核心角色。? 硬件方…

前端上傳 pdf 文件 ,前端自己解析出來 生成界面 然后支持編輯

要在前端解析 PDF 文件并生成可編輯界面&#xff0c;我們可以使用 PDF.js 庫來解析 PDF 內容&#xff0c;然后將其轉換為可編輯的 HTML 元素。 主要特點和工作原理如下&#xff1a; PDF 解析&#xff1a; 使用 Mozilla 的 PDF.js 庫解析 PDF 文件內容&#xff0c;提取文本信息。…

Linux“一切皆文件“設計哲學 與 Linux文件抽象層:struct file與file_operations的架構解析

在Linux系統中&#xff0c;“一切皆文件”&#xff08;Everything is a file&#xff09;是一個核心設計哲學&#xff0c;它抽象了系統資源的訪問方式&#xff0c;使得幾乎所有硬件設備、進程、網絡連接等都可以通過統一的文件接口&#xff08;如open()、read()、write()、clos…

藍橋杯零基礎到獲獎-第3章 C++ 變量和常量

藍橋杯零基礎到獲獎-第3章 C 變量和常量 文章目錄一、變量和常量1.變量的創建2.變量初始化3.變量的分類4.常量4.1 字?常量4.2 #define定義常量4.3 const 定義常量4.4 練習練習1&#xff1a;買票https://www.nowcoder.com/practice/0ad8f1c0d7b84c6d8c560298f91d5e66練習2&…

物理AI是什么技術?

當英偉達CEO黃仁勛在鏈博會上明確提出“物理AI將是AI的下一浪潮”時&#xff0c;這個看似陌生的概念瞬間引發了科技圈的廣泛關注。究竟什么是物理AI&#xff1f;它與我們熟悉的人工智能有何不同&#xff1f;又將如何重塑我們與物理世界的交互方式&#xff1f; 物理AI&#xff1…

GRIB數據處理相關指令

GRIB 數據格式簡介 GRIB(General Regularly distributed Information in Binary form)&#xff0c;是由世界氣象組織&#xff08;WMO&#xff09;設計和維護的一種用于存儲和傳輸網格數據的標準數據格式&#xff0c;它是一種自描述的二進制壓縮格式&#xff0c;通常具有擴展名…

微服務學習(六)之分布式事務

微服務學習&#xff08;六&#xff09;之分布式事務一、認識Seata二、部署TC服務1、準備數據庫表2、準備配置文件3、docker部署三、微服務集成seata1、引入依賴2、改造配置3、添加數據庫表4、測試四、XA模式1、兩階段提交2、seata的XA模型3、優缺點4、實現步驟五、AT模式1、Sea…

Go實現用戶登錄小程序

寫一個用戶登錄注冊的小程序 運行程序&#xff0c;給出提示1. 注冊輸入用戶名、密碼、年齡、性別 {"用戶名": "root", "passwd": "123456", "age": 18, "sex": "男"}注冊前要判斷是否存在此用戶2. 登錄…

鴻蒙藍牙通信

https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-bluetooth-low-energy 藍牙權限 module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.ACCESS_BLUETOOTH","reason": "…

Java:Map

文章目錄Map常用方法Map遍歷的三種方法先獲取Map集合的全部鍵&#xff0c;再通過遍歷來找值Entry對象forEach結合lambda表達式Map 案例分析需求我的代碼&#xff08;不好&#xff09;老師的代碼&#xff08;好&#xff09;好在哪里另外集合分為Collection和MapMap常用方法 代碼…

fastjson2 下劃線字段轉駝峰對象

在對接第三方或查詢數據庫時&#xff0c;返回的字段是下劃線分隔的&#xff0c;而在業務中需要轉成java對象&#xff0c;java對象的字段是駝峰的&#xff0c;使用fastjson2時&#xff0c;有兩種方法可以實現&#xff1a; 比如數據格式是&#xff1a; {"item_id": &q…

【硬件】藍牙音頻協議

1. 無線音頻傳輸的工作原理 在無線傳輸的過程中&#xff0c;音源設備首先將MP3、FLAC等音頻文件還原為PCM格式。通過藍牙音頻編碼轉為藍牙無線傳輸的文件&#xff0c;發送到音頻設備段。將藍牙無線傳輸的文件再次還原為PCM格式&#xff0c;之后轉為模擬信號并放大&#xff0c;通…

【宇樹科技:未來1-3年,機器人可流水線打螺絲】

在第三屆中國國際供應鏈促進博覽會上&#xff0c;宇樹科技工作人員表示&#xff0c;未來1到3年內&#xff0c;機器人產品有望從單一工業化產品&#xff0c;發展至復合化工業場景&#xff0c;如機器人搬完箱子后&#xff0c;換個 “手” 就能在流水線上打螺絲。在3到10年內&…