NOIp 数学知识点总结
推荐阅读 NOIp 基础数论知识点总结: https://www.cnblogs.com/greyqz/p/number.html
排列组合
常用公式
排列:$$\displaystyle A_n^m=\frac{n!}{(n-m)!}$$
全排列:\(A_n^n=n!\)
组合:$$\displaystyle C_nm=\frac{A_nm}{m!}=\frac{n!}{m!(n-m)!}$$
组合数的性质:
\]
\]
推导:$$ \displaystyle \begin{aligned} C_n^m & = \frac{n!}{m!(n-m)!}\ & = \frac{(n-1)!}{m!(n-m-1)!}\times\frac{n}{n-m}\ & =\frac{(n-1)!}{m!(n-m-1)!}\times(1+\frac{m}{n-m})\ & =C_{n-1}^{m}+\frac{(n-1)!}{(m-1)!(n-m)!}\ & = C_{n-1}m+C_{n-1}{m-1}\end{aligned} $$
\]
二项式定理:$$\displaystyle (a+b)n=\sum_{i=0}n C_n^i a^i b^{n-i}$$
\]
\]
\]
\]
组合数基本处理 \(O(n)\)
const int N = 1e5 + 7, MOD = 1e9 + 7;
int add(int a, int b) { if ((a += b) >= MOD) a -= MOD; return a; }
int mul(int a, int b) { return ll(a) * b % MOD; }
int C(int a, int b) { return mul(jc[a], mul(ijc[a - b], ijc[b])); }
int qpow(int a, int b) {
int r = 1;
for (; b; b >>= 1) {
if (b & 1) r = mul(r, a);
a = mul(a, a);
}
return a;
}
int jc[N], ijc[N];
void ini() {
jc[0] = 1; for (int i = 1; i < N; i++) jc[i] = mul(jc[i - 1], i);
ijc[N - 1] = qpow(jc[N - 1], MOD - 2);
for (int i = N - 2; i >= 0; i--) ijc[i] = mul(ijc[i + 1], i + 1);
}
Lucas 定理
对于正整数 \(n, m~ (n\ge m)\), 素数 \(p\), 令 \(n=n_kp_k+n_{k-1}p^{k-1}+\cdots+n_1p+n_0\), \(m=m_kp_k+m_{k-1}p^{k-1}+\cdots+m_1p+m_0\), 则
\]
可变形为:
\]
用 Lucas 定理可快速求解 \(C_n^m\bmod p\). 代码:
const int mod=10007;
int jc[mod], ijc[mod], T, n, m;
inline int lucas(int a, int b) {
if (a>b) return 0;
if (b<=mod) return jc[b]*ijc[a]%mod*ijc[b-a]%mod;
return lucas(a/mod, b/mod)*lucas(a%mod, b%mod)%mod;
}
int main() {
jc[0]=jc[1]=ijc[0]=ijc[1]=1;
for (int i=2; i<mod; ++i)
jc[i]=jc[i-1]*i%mod, ijc[i]=(mod-mod/i)*ijc[mod%i]%mod;
for (int i=2; i<mod; ++i)
ijc[i]=ijc[i-1]*ijc[i]%mod;
for (scanf("%d", &T); T; --T)
scanf("%d%d", &n, &m), printf("%d\n", lucas(m, n));
return 0;
}
矩阵乘法
由 \(a_n=2a_{n-3}+a_{n-1}\) 得矩阵转移方程:
\]
这里采用 []
表示 \(1\times 3\) 矩阵,()
表示 \(3\times 3\) 矩阵。
ll p[5][5], b[5][5], d[5][5], t[5][5];
memset(p, 0, sizeof p), memset(b, 0, sizeof b), memset(d, 0, sizeof d);
for (int i=1; i<=3; i++) b[i][i]=1ll; // unit matrix
p[1][1]=1ll, p[1][2]=1ll, p[1][3]=0ll;
p[2][1]=0ll, p[2][2]=0ll, p[2][3]=1ll;
p[3][1]=2ll, p[3][2]=0ll, p[3][3]=0ll; // transition matrix
d[1][1]=6ll, d[1][2]=1ll, d[1][3]=3ll; // initial matrix, a_3, a_2, a_1
// n<=3 特判
if (n<=3) {printf("%d\n", d[1][4-n]); return 0; }
// 矩阵快速幂
int K=n-3;
while (K>0){
if (K&1) {
// (b) *= (p)
memset(t, 0, sizeof t);
for (int i=1; i<=3; i++)
for (int j=1; j<=3; j++)
for (int k=1; k<=3; k++)
t[i][j]=(t[i][j]+b[i][k]*p[k][j]) % mod;
memcpy(b, t, sizeof b);
}
// (p) = (p)^2
memset(t, 0, sizeof t);
for (int i=1; i<=3; i++)
for (int j=1; j<=3; j++)
for (int k=1; k<=3; k++)
t[i][j]=(t[i][j]+p[i][k]*p[k][j]) % mod;
memcpy(p, t, sizeof p);
K>>=1;
}
// [t] = [d] * (b)
memset(t, 0, sizeof t);
for (int i=1; i<=3; i++)
for (int j=1; j<=3; j++)
t[1][i]=(t[1][i]+d[1][j]*b[j][i]) % mod;
printf("%lld\n", t[1][1]);
数学规律
Catalan 数
\]
1, 1, 2, 5, 14, 42, 132, ...
以下问题属于 Catalan 数:
- 有 \(2n\) 个人排成一行进入剧场. 入场费 5 元. 其中只有\(n\)个人有一张 5 元钞票, 另外 \(n\) 人只有 10 元钞票, 剧院无其它钞票, 问有多少中方法使得只要有 10 元的人买票, 售票处就有 5 元的钞票找零?
- 一位大城市的律师在她住所以北 \(n\) 个街区和以东 \(n\) 个街区处工作. 每天她走 \(2n\) 个街区去上班. 如果他从不穿越(但可以碰到)从家到办公室的对角线, 那么有多少条可能的道路?
- 在圆上选择 \(2n\) 个点, 将这些点成对连接起来使得所得到的 \(n\) 条线段不相交的方法数?
- 对角线不相交的情况下, 将一个凸多边形区域分成三角形区域的方法数?
- 一个栈 (无穷大) 的进栈序列为 \(1,2,3, \ldots ,n\) 有多少个不同的出栈序列?
- \(n\) 个结点可够造多少个不同的二叉树?
- \(n\) 个不同的数依次进栈, 求不同的出栈结果的种数?
- \(n\) 个 \(+1\) 和 \(n\) 个 \(-1\) 构成 \(2n\) 项 \(a_1,a_2, \ldots ,a_{2n}\), 其部分和满足 \(a_1+a_2+ \cdots +a_k\ge 0\) \((k=1,2,3, \ldots ,2n)\), 该数列为?
ssoj1073:给定 \(0<p<q<100,p,q\in\mathbf{N}^*\), 求 \(\displaystyle\frac{H_q}{H_p}\).
解:令 \(q=p+x,x\in\mathbf{N}^*\), 则
\[\displaystyle \frac{H_q}{H_p}=\frac{C_{2q}^q\cdot (p+1)}{C_{2p}^p\cdot (q+1)} =\frac{\displaystyle\frac{(2q)!}{(q!)^2}\cdot (p+1)}{\displaystyle\frac{(2p)!}{(p!)^2}\cdot (q+1)}=\frac{\displaystyle\frac{(2p+2x)!}{\big((p+x)!\big)^2}\cdot (p+1)}{\displaystyle\frac{(2p)!}{(p!)^2}\cdot (p+x+1)}=\frac{\displaystyle\prod_{i=2p+1}^{2q}{i}\cdot(p+1)}{\left(\displaystyle\prod_{i=p+1}^q{i}\right)^2 (q+1) }
\]带入特殊值计算.
Stirling 数
(2007 普及)将 \(n\) 个数 \(1,2,\ldots,n\) 分成 \(r\) 个部分. 每个部分至少一个数. 将不同划分方法的总数记为 \(S_n^r\). 例如, \(S_4^2=7\), 这 7 种不同的划分方法依次为 \(\{(1) , (234) \},\{(2) , (134) \},\{(3) , (124) \},\{ (4) , (123) \},\{ (12) , (34) \},\{ (13) , (24) \},\{ (14) , (23) \}\). 当 \(n=6, r=3\) 时, \(S_6^3=\)( )
\]
\]
NOIp 数学知识点总结的更多相关文章
- NOIP初赛知识点大全-普及+提高组
NOIP初赛知识点大全-普及+提高组 https://mp.weixin.qq.com/s/vSXLDxmbBoFfZPzD8lrt3w
- Noip数学整理
目录 Noip数学整理 序 1 取模相关 2 质数相关 3.基本操作 4.方程相关 5.数列相关 6.函数相关 Noip数学整理 序 因为某些原因, Noip对于数学方面的考纲仅停留在比较小的一部分, ...
- 史上最全NOIP初赛知识点
CSP-J/S 第一轮知识点选讲 \(NOIP\)(全国青少年信息学奥林匹克竞赛)于2019年取消.取而代之的是由\(CCF\)推出的非专业级软件能力认证,也就是现在的\(CSP-J/S\).作为一名 ...
- Contest2158 - 2019-3-14 高一noip基础知识点 测试3 题解版
传送门 预计得分:0 实际得分:90 还行 T1 数学卡精 二分double卡精 反正就是卡精 怎么办?卡回去!! 将double*=1e4,变成一个long long 注意四舍五入的奇技淫巧 代码 ...
- NOIP初赛知识点
http://www.doc88.com/p-9982181637642.html 连载中…… (一)八大排序算法 下面这张表摘自博客http://blog.csdn.net/whuslei/arti ...
- [Noip复习知识点][个人向]Zackzh
只是列列一些要复习的,努力复习吧,有种noip退役的赶脚. 一.模拟 (这你也不会?退役吧) 二.DP 1.基础dp 2.区间dp 3.状压dp 4.树形dp 6.概率(期望)dp 7.环形dp 8. ...
- NOIP考前知识点整理
前言:距离NOIP还有不到一百天(虽然NOIP没了),为了整理一下所学的内容,才有了这篇博文.本文内容无特殊说明全部来自于博主的博客,代码也都是新敲的,努力在个人的码风基础上做到尽量简洁,求资瓷. 一 ...
- Contest2195 - 2019-4-25 高一noip基础知识点 测试8 题解版
(因为david_alwal太懒了,所以本期题解作者为Th Au K,码风不同请自行适应) 传送门 T1 BFS?贪心?我也说不清 反正就是对每一个“#”搜一下他的旁边有没有“#”就行了 代码 T2 ...
- Contest2178 - 2019-4-18 高一noip基础知识点 测试7 题解版
刚刚改完题,才有时间发题解 传送门 T1 exgcd裸题 对a,b跑exgcd,答案就是x*c/gcd(a,b),y*c/gcd(a,b) 不合法的情况:当且仅当c%gcd(a,b)!=0 代码 T2 ...
随机推荐
- 一个简单的INI读写文件类,基于C++的模板编程实现,使用超级方便
GITHUB链接:https://github.com/brofield/simpleini 主体代码: /** @mainpage <table> <tr><th> ...
- dvorak键盘布局调整
一站直达: http://www.kaufmann.no/roland/dvorak/
- 多线程11-AutoResetEvent
); Console.WriteLine()); t.Start(); Console.WriteLine()); ...
- POJ-1064.Cablemaster.(二分法枚举值求最优值)
题目链接 本题大意:给你n个长度为value[ i ]的长木板,让你切割成为等长的k份,问你切割的最大长度是多少. 本题思路:其实很容易可以想到先找到一个上界和一个下界,开始枚举里面的所有长度,取最长 ...
- WOJ#3836 Sightseeing Trip
描述 给定一张无向图,求图中一个至少包含 3 个点的环,环上的节点不重复,并且环上的边的长度之和最小.该问题称为无向图的最小环问题.在本题中,你需要输出最小环的方案,若最小环不唯一,输出任意一个均可. ...
- Python自学第二天学习之《元组与字典》
一. 元组:tuple类型,元组一级元素 不能修改 不能增加 不能删除,是有序的. 格式 :tu=(1,2,3,4,5,6) 1.类型转换: #字符串转换成元组 b=“123” c=tuple(b) ...
- fanc委托在项目中使用
一,上代码 using System; namespace FuncDemo { class Program { static void Main(string[] args) { //无参数的fan ...
- spring,get请求中带date日期格式参数,后台无法转换的问题
今天遇到个很奇怪的问题.前端 的查询条件中带有日期范围日期的格式 是 yyyy-MM-dd HH:mm 结果后台报错 org.springframework.validation.BindExcept ...
- nodejs回调大坑
最近看到nodejs,因为有一个处理里面有好几个异步操作,调入回调大坑,不禁觉得很恶心,真的很讨厌发明这种写法的人,简直反社会!!!遂转载一篇解坑的文章,原文地址:http://www.infoq.c ...
- 尖沙咀到底谁说的算?!--- CSS层叠
前些天,我朋友发了这个段CSS我. //css *{ color:#fff ; } div{ color:#000 !important; } //html <div><span&g ...