初赛复习
https://wenku.baidu.com/view/b4edbd28e2bd960590c67702.html
http://url.cn/5jiO6Oh
復賽前還要多寫幾次樹狀數組,不熟練。
[錯題集]
關于小數的進制轉換 :10變n,乘n取整;n變10,小數部分從左往右第x位就a[x](n^x)最后加上整數部分和小數點。
二分查找 的前提是有序和順序結構存儲
后綴表達式 :操作數在運算符前不加括號
圖的性質 :n(n>=3)個點的連通圖,最多邊數n×(n-1)/2
通過計算時間的遞推式算時間復雜度
主定理 (其實算是主定理的一個推論?原主定理比較難記...)T(n) = aT(n/b) + c(n^d)
- 若a<(b^d),則O(n^d)
- 若a=(b^d),則O(n^dlogn)
- 若a>(b^d),則O(n^(log_b_a))[a關于b的對數,這個Markdown有問題...]
計數排序 :以空間換時間,(時間上)比其他比較排序優秀
看程序寫結果有坑 :不要想當然,該寫完的要寫完。
[硬件]
電子管-晶體管-集成電路-大規模集成電路
ENIAC
馮·諾依曼理論(EDVAC):
1 存儲器 運算其 控制器 輸入設備 輸出設備
2 存儲程序思想
微型機主要技術指標:
字長 BIT (CPU主要性能指標) = 寄存器位數
主頻 決定速度(CPU) PII300 300指的是主時鐘頻率
內存容量 單位BYTE 8BIT = 1 BYTE 1024B = 1KB 1024KB = 1MB
外村容量 軟盤 硬盤 光盤
寄存器 的存取速度最快
計算機特點(略) 應用:數值計算、信息管理、過程控制、輔助工程
中央處理器(CPU):
運算器 算數運算、邏輯運算
控制器 指揮系統
寄存器
能訪問的最大存儲容量取決于 地址總線
存儲容量:B為單位; 1B = 8bits; 1KB = 1024B; 1MB = 1024KB; 1GB = 1024MB.
存儲器:
- 自己亂總結的:寄存器>快存>主存>輔存
- 存儲器的存儲速度:內存>硬盤>光盤
- 其他部件速度:CPU>高速緩存>內存>硬盤>U盤>光盤>軟盤
內部存儲器 CPU能直接訪問,包括快速緩沖存儲器(cache)和主存儲器
主存儲器 (內存中沒有快速緩沖存儲器) 按讀寫功能分 只讀存儲器(ROM)和隨機存儲器(RAM)兩種
外部存儲器:1 外存儲器=輔助存儲器 2 硬盤 3 軟盤(3.5英寸/1.44MB) 4 光盤存儲器 (CD-ROM) 56MB 5 閃存
輸入設備 鍵盤 鼠標 手寫筆 觸摸屏 麥克風 掃描儀
輸出設備 顯示器(CRT LCT) 打印機(針式、噴墨、激光[靜電吸附墨粉轉移紙張]) 繪圖儀 音箱
主機由CPU和內存儲器組成
計算機系統總線上傳送的信號有 數據信號 控制信號 地址信號
[進制與編碼]
轉換:二進制 十進制 八進制 十六進制
原碼 - 符號位(+0 -1)+數值
反碼 - +;原碼=反碼; -:1+全部取反
補碼 - n位字長 二進制下M = 2^n. >=0時原碼=補碼;<0時 補碼=反碼+1
ASCII碼 '0'-48 'A'-65 'a'-97
漢字信息編碼
輸入
交換:一級漢字按拼音;二級漢字按部首
存儲(字模)
軟件與操作系統
系統軟件 支持應用軟件,操作系統軟件:DOS Windows Linux Unix
應用軟件
操作系統(OS)
各種文件后綴名
bat、com、exe、sys、tmp、zip
doc、xls、txt、htm
bmp、gif、jpg、psd
wav、avi、mp3、swf
[網絡]
TCP/IP 網絡協議
鏈路層-網絡層(IP)-傳輸層(TCP)-應用層(FTP、TALENT、…)
[五種經典遞推關系]
Fibonacci數列:F(x) = F(x-1) + F(x-2)
Hanoi塔問題:H(n) = 2H(n-1) + 1
平面分割問題:A(n) = A(n-1) + 2(n-1)
Catalan數:ans = C(2n, n)/(n+1);
C(n) = C(1)C(n-1) + C(2)C(n-2) + ... +C(n-1)C(1),n>=2
**C(n) = (2*n)!/[(n+1)!*n!]**
第二類Striling數:
定義:n個有區別的球放到m個相同的盒子中,要求無一空盒,其不同的方案數用S2(n,m)表示,稱為第二類Stirling數。
下面就讓我們根據定義來推導帶兩個參數的遞推關系——第二類Stirling數。
解:設有n個不同的球,分別用b1,b2,……bn表示。從中取出一個球bn,bn的放法有以下兩種:
1、bn獨自占一個盒子;那么剩下的球只能放在m-1個盒子中,方案數為S2(n-1,m-1);
2、bn與別的球共占一個盒子;那么可以事先將b1,b2,……bn-1這n-1個球放入m個盒子中,然后再將球bn可以放入其中一個盒子中,方案數為mS2(n-1,m)。
綜合以上兩種情況,可以得出第二類Stirling數定理:
S2(n,m)=mS2(n-1,m)+S2(n-1,m-1) (n>1,m1)
邊界條件可以由定義2推導出:
S2(n,0)=0;S2(n,1)=1;S2(n,n)=1;S2(n,k)=0(k>n)。
Catalan數在組合計算中的應用
1、矩陣鏈乘: P=a1×a2×a3×……×an,依據乘法結合律,不改變其順序,只用括號表示成對的乘積,有幾種括號化的方案?
2、一個棧(無窮大)的進棧序列為1,2,3,…,n,有多少個不同的出棧序列?
3、n個節點構成的二叉樹,共有多少種情形?
4、求一個凸多邊形區域劃分成三角形區域的方法數?
5、在圓上選擇2n個點,將這些點成對鏈接起來使得所得到的n條線段不相交,一共有多少種方法?(下圖供參考)
6、n*n的方格地圖中,從一個角到另外一個角,不跨越對角線的路徑數為h(n).例如, 4×4方格地圖中的路徑有:
7、n層的階梯切割為n個矩形的切法數也是。如下圖所示:
8、有2n個人排成一行進入劇場。入場費5元。其中只有n個人有一張5元鈔票,另外n人只有10元鈔票,劇院無其它鈔票,問有多少中方法使得只要有10元的人買票,售票處就有5元的鈔票找零?
9、甲乙兩人比賽乒乓球,最后結果為20∶20,問比賽過程中甲始終領先乙的計分情形的種數。
10、2n個高矮不同的人,排成兩排,每排必須是從矮到高排列,而且第二排比對應的第一排的人高,問排列方式有多少種?
[數論]
最大公約數
1 分解質因子
2 歐幾里得算法
3 二進制法
最小公倍數
lcm = a*b/gcd
擴展歐幾里得 - 裴蜀定理 - 對任何整數a,b,關于未知數x,y的裴蜀等式ax + by = c,方程有整數解當且僅當c是gcd(a, b)的倍數。裴蜀等式有解時必然有無窮多個解。
void Extended_Euclid(int a, int b, int &d, int &x, int &y){if(b == 0){d = a;x = c/a;y = 0;}else{int x1, y1;Extended_Euclid(b, a%b, d, x1, y1);x = y1;y = x1 - a/b*y1;} }歐拉函數 - 對正整數n,歐拉函數是小于或等于n的數中與n互質的數的數目。可在分解質因子的過程完成。
int euler(int n){int ans = n;for(int i = 2; i*i <= n; i++){if(n % i == 0){ans = ans/i*(i-1);while(n%i == 0) n/= i;}}if(n>1) ans = ans/n*(n-1);return ans; }素數
1 樸素做法 (判定)
2 埃式篩法 (找出1~n素數)
void sieve(int n){memset(pr, true, sizeof(pr));for(int i = 2; i*i <= n; i++){if(pr[i]){for(int j = i*i; j <= n; j += i)if(pr[j]) pr[j] = false;}} }3 線性篩法
void Euler_sieve(int n){memset(pr, true, sizeof(pr));ans[0] = 0;for(int i = 2; i <= n; i++){if(pr[i]) ans[++ans[0]] = i;//把素數保存到素數表ans中 for(int j = 1; j <= ans[0] && i*ans[j] <= n; j++){pr[i*ans[j]] = false;if(i % ans[j] == 0) break;}} }費馬小定理 - 假如a是一個整數,p是一個素數,gcd(a, p) = 1,那么有:\[a^{p-1} ≡ 1(mod p)\]
應用:p是素數,a、p互質,則 \(a^b mod p = a^{b mod p} mod p\)
注意:不代表\(a^x ≡ 1(mod p)\) 中x的最小正整數值是p-1.
歐拉定理 - 若n,a為正整數,且n、a互質,則\(a^{φ(n)} ≡ 1(mod n)\)
應用:n>1,a、n互質, \(a^b mod n = a^{b mod φ(n)} mod n\)
威爾遜定理 - 當且僅當p為素數時:\((p-1)! ≡ 1(mod p)\)
逆元 - 對任意n>1,如果gcd(a, n)=1,則方程ax≡b(mod n)對模n的解可能無解也可能不唯一!
把ax≡b(mod n) 改寫成 ax + ny = b的形式,方程要有解必須滿足p|b.
當不滿足p|b時,利用擴展歐幾里得extended_Euclid求出ax + ny = b的一個特解(x0, y0),方程的一般解為(x0+k(n/p), y0-k(a/p)),x對模n的解是唯一的。
中國剩余定理 - 如計算被9,8,7除時,余數分別為1、2、3的所有整數x。
int remainder(){for(int i = 1; i <= n; i++){int x, y;Extended_Euclid(mul/a[i], a[i], x, y);//x為mul/a[i]關于模a[i]的逆元ans = (ans + mul/a[i]*x*r[i]%mul)%mul; }ans = (ans + mul) % mul;return ans; }線性同余方程
//返回最小正整數解 int solve(){coe = 1; con = 0;for(int i =1; i <= n; i++){scanf("%d%d%d", &a[i], &b[i], &c[i]);int d, x, y;//用擴展歐幾里得解方程a[i]*(coe*x+con)+b[i]*y = c[i]Extended_Euclid(a[i]*coe, b[i], c[i]-a[i]*con, d, x, y);con += coe*x;coe *= b[i]/d; }return (con % coe+coe) % coe; }轉載于:https://www.cnblogs.com/hanser/p/7653164.html
總結
- 上一篇: C 语言定义
- 下一篇: Android源码学习(3) Handl