原创 洛谷題集——妖夢拼木棒(數組與map運行效率)

在STL庫中,我們能夠使用map容器自動建立Key-value的對應。key 和 value可以是任意你需要的類型。 假如我們將map作爲數組來使用,我們會發現它們的運行效率截然不同! 題目:妖夢拼木棒 洛谷鏈接 有 n 根木棒,

原创 洛谷題集——線性篩素數(一般篩選與線性篩選)

如題,給定一個範圍 n,有 q 個詢問,每次輸出第 k 小的素數。 輸入格式 第一行包含兩個正整數 n,q,分別表示查詢的範圍和查詢的個數。 接下來 q 行每行一個正整數 k,表示查詢第 k 小的素數。 輸出格式 輸出 q 行,每

原创 快速排序模板(循環+遞歸)

快速排序是對冒泡排序的一種改進。 它的基本思想是:通過一次排序將要排序的數據分割成獨立的兩部分,其中一部分的所有數據都比另外一不部分的所有數據都要小,然後再按次方法對這兩部分數據分別進行快速排序,整個排序過程可以遞歸或者非遞歸進行

原创 單調遞增隊列(全過程圖文實現 另附習題)

什麼是單調隊列,有什麼用? 不妨用一個問題來說明單調隊列的作用和操作: 不斷地向緩存數組裏讀入元素,也不時地去掉最老的元素,不定期的詢問當前緩存數組裏的最小的元素。 最直接的方法:普通隊列實現緩存數組。 進隊出隊都是O(1),一次

原创 洛谷題集——最大食物鏈計數(拓撲排序)

拓撲排序 拓撲排序(topological-sort)是指由某個集合上的一個偏序得到該集合上的一個全序的操作。拓撲排序常用來確定一個依賴關係集中,事物發生的順序。 拓撲排序是對有向無環圖的頂點的一種排序,它使得如果存在一條從頂點A

原创 單向循環鏈表(如何實現約瑟夫環)

約瑟夫問題:總共有n個人排成一圈,從某個人開始,按順時針方向依次編號。從編號爲1的人開始順時針報數1(下一個報號2),報到m的人退出圈子然後重新從1開始順時針報數。這樣不斷循環下去,圈子裏的人將不斷減少。要求全部人員輸出退出順序。

原创 單鏈表基礎練習(第一個元素排序)

題目:已知帶頭結點單鏈表L,設計算法實現:以表中第一個元素作爲標準,將表中所有值小於第一個元素 的結點均放在第一個結點之前 ,所有值大於 第一個元素的結點均放在第一個元素結點之後。 這是一個強行分類的方式…… #include<s

原创 洛谷題集——雜務(易入誤區)

這題感覺挺有意思的,有意思就在於它容易誤導對這類題型不太熟悉的初學者(例如我……) 雜務 洛谷題目鏈接 John的農場在給奶牛擠奶前有很多雜務要完成,每一項雜務都需要一定的時間來完成它。比如:他們要將奶牛集合起來,將他們趕進牛棚,

原创 二分查找(附例題)

二分查找: 二分查找也稱折半查找(Binary Search),它是一種效率較高的查找方法。值得注意的是折半查找要求線性表必須採用順序存儲結構,而且表中元素按關鍵字有序排列。 讓我們回憶一下平時我們如何在一本詞典裏查找一個單詞

原创 計時函數(基本知識)

計時函數的運用 在算法題提交的時候,系統經常會給你一個TLE。 這提醒我們要優化算法,但我們如何優化算法這是一個問題。 我們可以運用計時函數,大概統計一下代碼在最糟糕的情況下的運行時間。 可以大概得出優化方向(當然這裏只是大概)

原创 KMP例題

KMP算法:實現兩個字符串的匹配。 KMP講解 //KMP模板 #include<bits/stdc++.h> using namespace std; void get_next(string t, int* next){

原创 加速讀取——三式(getchar,std::ios::synd_with_stdio(false)、cin.tie(0))

在一些題目中會出現數據輸入很大的情況,如果我們運用不好讀取數據工具的話,那麼很可能會在讀取數據上花費較多的時間,甚至還沒讀完就超時了。 讀取速度 cin << scanf ≈ cin(關閉流同步) << getchar() ci

原创 前綴和與差分(初學推薦)

前綴和 適用於靜態數組區間和 時間複雜度:O(n) 原理:當兩個整數a,b對k具體相同餘數(a%k==b%k),那麼a - b一定爲k的倍數。( a != b ) 一維前綴和 題目一:k倍區間 給定一個長度爲N的數列,A1, A2

原创 洛谷題集——01迷宮(dfs、bfs)

01迷宮 有一個僅由數字00與11組成的n×n格迷宮。若你位於一格0上,那麼你可以移動到相鄰4格中的某一格1上,同樣若你位於一格1上,那麼你可以移動到相鄰4格中的某一格0上。 你的任務是:對於給定的迷宮,詢問從某一格開始能移動到多

原创 洛谷題集——裝箱問題(暴力dfs、0/1揹包通俗版)

前言:這道題可以說是最經典的0/1揹包問題。 最近算是第一次正式遇到0/1揹包問題(以前都是暴力求解),這篇文章主要將這種類型的題目講細、講清楚。 裝箱問題 有一個箱子容量爲VV(正整數,0 ≤ V ≤ 20000),同時有n個物