分類
一、小資料範圍,需要枚舉,求最大或最小值
搜尋,for循環枚舉
二、資料較大,也有枚舉特征,或等差序列
動态規劃
三、題目比較長,題中有對流程的描述
模拟
四、看起來像數學中的找規律題
數論,想不出公式就遞推
五、給了一個圖,找最短路徑
最短路算法
六、給了一個圖,判斷圖的連通性并在連通時求最大或最小花費
生成樹
七、在一段區間裡修改或求和
線段樹、樹狀數組、模拟
八、最大值最小或是最小值最大或判斷一個數成不成立
二分答案
九、素數的判斷
枚舉到根号a。
十、中位數與最小值
均分紙牌問題。
十一、網絡流的限流
建立一個彙點,連一條流量為限制流量的邊。
十二、把一個數的每一位拼成一個整數
for(int i=t1;i>=1;i--)
{
tot=tot*10+ori[i];
}
十三、帶權二分圖最大比對
源點到左邊點流量為1,費用為0;左邊點到能比對的右邊點流量為1,費用為邊權;左邊點到彙點流量為1,費用為0。
十四、平面圖染色
顔色=2時,如果n是基數則方案數為0,n是偶數則方案數為2。
十五、詢問一些序列中最多重複的個數
做一個統計序列,在序列的左端點+1,右端點-1,然後做這個序列的字首和。
十六、bitset神器
這玩意所占空間是相同元素個數的bool數組的1/8,運作時間是1/32(32位系統)或1/64(64位系統)。
十七、cctype庫函數
十八、堆的複雜度計算
log(堆的大小),與輸入資料的規模無關。
十九、nth_element(first,kth,last)函數
使第k大元素處于第k位置,并且比這個元素小的元素都排在這個元素之前,比這個元素大的元素都排在這個元素之後,但不能保證他們是有序的。
二十、long double類型函數
在一般的cmath函數後面加一個l,否則即使傳參是long double,計算的結果也是double。輸入/出long double最靠譜的方式是用double類型輸入/出然後轉成 long double。
二十一、位運算^
如果a^b==2,那麼a^2==b。
二十二、數對個數
可重:n(n-1)。不可重:n(n-1)/2。
二十三、優先隊列的comp
大小于号方向與元素大小相反
#include <queue>
#include <iostream>
using namespace std;
struct cmp {
bool operator()(int i, int j) {return i < j;}
};
int main() {
priority_queue<int, vector<int>, cmp> q;
for (int i = 0; i < 5; i++) {q.push(i);}
for (int i = 0; i < 5; i++) {cout << q.top() << ' '; q.pop();}
return 0;
}
暫時這些,想到在更。
轉載于:https://www.cnblogs.com/SpeedZone/p/7223897.html