数学
ShɑΙteж
think twice,code once
展开
-
Cantor展开
int FACT[]={1,1,2,6,24,120,720,5040,40320,362880};//计算阶乘int cantor(int a[],int n){ int x=0; for(int i=0;i<n;i++) { int tot=0; for(int j=i+1;j<n;j++) { if(a[j]<a[i]) tot++...原创 2018-05-04 22:01:45 · 305 阅读 · 0 评论 -
[ZROI160]路径计数 DP+广义容斥
50pts f[s][t][d][x]表示从s点出发走到x路径长度为d且不经过s和t的方案数#include<bits/stdc++.h>#define rep(i,a,b) for(int i=(a);i<=(b);i++)using namespace std;const int N=101;struct node{int y,n;}e[N*N];...原创 2019-03-06 16:57:41 · 195 阅读 · 0 评论 -
当小球遇上盒子
小球与盒子问题这类问题是求解把一些小球放进一些盒子里的本质不同的方案数。通过球相同/不同,盒子相同/不同,能/不能有空盒分成了8个不同的问题。本篇文章会分别对这8个问题进行分析求解。前置芝士&复习巩固组合数 :从nnn个物品里选出m个物品进行组合的方案数。Cnm=n!m!⋅(n−m)!C_{n}^{m}=\frac{n!}{m!\cdot (n-m)!}Cnm=m!⋅...原创 2019-03-27 21:45:51 · 811 阅读 · 0 评论 -
[51nod1742]开心的小Q 数论分块
[51nod1742]Solution #include<bits/stdc++.h>#define rep(i,a,b) for(ll i=(a);i<=(b);i++)#define ll long longusing namespace std;const ll N=1e5;ll v[N],cnt,l,r;ll sum(ll x,ll n){ l...原创 2019-03-11 19:54:12 · 202 阅读 · 0 评论 -
[51nod1616]最小集合
[51nod1616]ai并不大,所以我们可以正着考虑每个数是否在这个集合中必须出现#include<bits/stdc++.h>#define rep(i,a,b) for(int i=(a);i<=(b);i++)#define per(i,a,b) for(int i=(a);i>=(b);i--)using namespace std;...原创 2019-03-12 07:31:32 · 299 阅读 · 0 评论 -
[ZROI322]C酱的表格 组合数学
[ZROI322]考虑贡献即可#include<bits/stdc++.h>#define rep(i,a,b) for(int i=(a);i<=(b);i++)#define per(i,a,b) for(int i=(a);i>=(b);i--)using namespace std;const int mod=998244353;cons...原创 2019-03-20 21:28:22 · 234 阅读 · 0 评论 -
[51nod1678]lyk与gcd 容斥
[51nod1678]考虑容斥:ans=总和 - 下标和i不互质的数的和 枚举i的质因数,容斥即可#include<bits/stdc++.h>#define rep(i,a,b) for(int i=(a);i<=(b);i++)#define per(i,a,b) for(int i=(a);i>=(b);i--)using namespace std;...原创 2019-03-21 11:52:34 · 245 阅读 · 0 评论 -
Lucas定理
模数为质数时成立#include<bits/stdc++.h>#define rep(i,a,b) for(int i=(a);i<=(b);i++)#define per(i,a,b) for(int i=(a);i>=(b);i--)using namespace std;int fact[100010],T,n,m,p;inline int read(...原创 2019-03-25 11:19:46 · 203 阅读 · 0 评论 -
EXCRT
[EXCRT模板]龟速乘ll mul(ll a,ll b,ll p){ll ans=0;for(;b;b>>=1,a=(a+a)%p)if(b&1)ans=(ans+a)%p;return ans;}扩欧ll exgcd(ll a,ll b,ll &x,ll &y){ if(b==0){x=1,y=0;return a;} ll d=exgc...原创 2019-03-21 19:23:55 · 321 阅读 · 0 评论 -
[BZOJ2839]集合计数 组合数学+容斥原理
[BZOJ2839]一个有N个元素的集合有2^N个不同子集(包含空集),现在要在这2^N个集合中取出若干集合(至少一个),使得它们的交集的元素个数为K,求取法的方案数,答案模1000000007。 垃圾套路题 考虑交集元素个数>=k时,ans=C(n,k)*(2^(2^(n-i)) - 1) 2^(2^(n-i))=2^( 2^(n-i)%(mod-1) ) 费马小定理 直接计算...原创 2019-03-26 07:47:01 · 296 阅读 · 0 评论 -
错排问题
错排问题:有多少个长度为n的排列满足对于所有的1&amp;amp;amp;lt;=i&amp;amp;amp;lt;=n1&amp;amp;amp;lt;=i&amp;amp;amp;lt;=n1&amp;amp;lt;=i&amp;amp;lt;=n,i!=aii!=a_{i}i!=ai递推式f[1]=0,f[2]=f[0]=1f[1]=0,f[2]=f[0]=1f[1]=0,f[2]=f[0原创 2019-03-06 11:49:51 · 194 阅读 · 0 评论 -
容斥原理两则
这两个套路都是把恰好....转化成了至少.....,最后根据容斥原理递推出恰好的值[SDOI2009]Bill的挑战f[i]表示至少与i个字符串匹配的方案数 ans[i]表示只与i个字符串匹配的方案数Code#include<bits/stdc++.h>#define rep(i,a,b) for(int i=(a);i<=(b);++i)#define...原创 2019-03-05 20:13:57 · 199 阅读 · 0 评论 -
容斥原理
基本原理列出题目中的n个条件。求满足这n个条件中每一个的方案的个数。枚举这些条件的所有2^n个集合。考虑一个集合x,令不满足x中所有条件的方案有A个。如果x的大小是奇数,给答案减去A,不然给答案加上A。欧拉函数求1~n之间与n互质的数的个数对不合法的数进行容斥假设有三个质因子p1,p2,p3ans=n−np1−np2+np1∗p2ans=n-\frac{n}{p1}-\f...原创 2019-01-20 22:01:16 · 407 阅读 · 0 评论 -
生成函数
定义f(x)=a0+a1x+a2x2+a3x3+...f(x)=a_{0}+a_{1}x+a_{2}x^{2}+a_{3}x^{3}+...f(x)=a0+a1x+a2x2+a3x3+...称f(x)f(x)f(x)是序列a0,a1,a2,a3...a_{0},a_{1},a_{2},a_{3}...a0,a1,a2,a3...的生成函数题目有1克、2克、3克、4克的砝码各...原创 2019-01-25 22:00:42 · 196 阅读 · 0 评论 -
[BZOJ2179] FFT快速傅立叶&高精度乘法
「BZOJ2179」Code#include<bits/stdc++.h>using namespace std;#define pi acos(-1) typedef complex<double> C;const int N = 131100;char s[N],t[N];int n,m,l,r[N],c[N];C a[N],b[N]; v...原创 2019-01-15 21:31:04 · 299 阅读 · 0 评论 -
FFT 快速傅里叶变换
快速学习FFT原理连小学生都能看懂的FFT这年头不是被小学生花式吊打吗如果你想知道的更详细一点NTT原理及实现 卷积 FFT与高精度乘法各种题目「BZOJ2179」FFT快速傅立叶&高精度乘法...原创 2019-03-27 21:46:12 · 502 阅读 · 0 评论 -
Prufer序列与树的计数
Prufer序列Prufer数列是有标号无根树的一种数列,点数为n的树转化来的Prufer数列长度为n-2。 对于一棵确定的有标号无根树,对应着唯一确定的prufer序列。构造方法有标号无根树转化为Prufer序列找到编号最小的度数为1的点。 删除该节点并在序列中添加与该节点相连的节点的编号。 重复1,21,2操作,直到整棵树只剩下两个节点如下图的prufer序列为3,5...原创 2019-02-15 07:47:36 · 758 阅读 · 0 评论 -
[BZOJ2179] NTT快速傅立叶&高精度乘法
「BZOJ2179」Code#include<bits/stdc++.h>#define rep(i,a,b) for(int i=(a);i<=(b);i++)#define ll long longusing namespace std;const int mod=479*(1<<21)+1; const int N = 131100;cha...原创 2019-02-17 15:48:32 · 767 阅读 · 0 评论 -
[ZROI553] NTT+组合数
[ZROI553] 把G反过来原式就变成这样对于确定的i,贡献都会卷到第n+r项,直接NTTCode#include<bits/stdc++.h>#define rep(i,a,b) for(int i=(a);i<=(b);i++)#define ll long longusing namespace std;const int mod=...原创 2019-02-17 16:00:24 · 435 阅读 · 0 评论 -
[HAOI2018]苹果树 组合数学
[HAOI2018]基础组合数学Code#include<bits/stdc++.h>#define rep(i,a,b) for(ll i=(a);i<=(b);i++)#define ll long longusing namespace std;const ll N=4e3;ll fact[N],dp[N][N],c[N][N],n,mod,ans=0...原创 2019-02-18 07:49:10 · 231 阅读 · 0 评论 -
欧拉定理
#include<bits/stdc++.h>#define rep(i,a,b) for(ll i=(a);i<=(b);i++)#define per(i,a,b) for(ll i=(a);i>=(b);i--)#define ll long longusing namespace std;const ll N=2e6;ll flag,mod,a...原创 2019-03-26 14:38:26 · 1070 阅读 · 0 评论