https://wenku.baidu.com/view/b4edbd28e2bd960590c67702.html
复赛前还要多写几次树状数组,不熟练。
[错题集]
关于小数的进制转换 :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<(bd),则O(nd)
- 若a=(bd),则O(ndlogn)
- 若a>(bd),则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) = 2*H(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) = (2n)!/[(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 朴素做法 (判定)
bool isprime(int n){
if(n == 1) return false;
else{
for(int i = 2; i*i <= n; i++)
if(n % i == 0) return false;
return true;
}
}
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;
}