![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数论&&组合数学
AcerMo
一只辣鸡大学生
展开
-
BZOJ3142&&洛谷P3228 [HNOI2013]数列
毒瘤数学题思路我们考虑如何限定同类数列?用涨幅相同限定所以我们通过枚举每两天之间的涨幅就可以枚举出一类数列,这类数列有多少种呢?我们假设第i天到第i+1天的涨幅是s,第一天涨了s1,第二天涨s2,那么到最后我们可以通过调大第1天的价格,那么后面就一起变大了,所以因为有每天都不大于n这个限制,所以最大的那天应该是最后一天也就是第k天要小于等于n,不难发现将前几天的涨幅相加再加上第一天的价格就...原创 2018-10-17 18:36:20 · 254 阅读 · 0 评论 -
原根[学习笔记]
markdown真难用真香!原创 2018-08-31 20:23:05 · 245 阅读 · 0 评论 -
BZOJ1303&&洛谷P1627 [CQOI2009]中位数
大暴力+无脑前缀和我们找到m所在的位置,然后,比m大的,记成1,比 m小的,记成-1,m记成零,然后我们记录从m所在位置向前的前缀和,在记录从m所在位置向后的前缀和,记录下每种前缀和出现的次数,然后我们枚举左侧的和,然后右侧满足右侧和左侧前缀和相加等于零就行了,相加等于零说明比m大的和比m小的数数量相同,然后m就是中位数了,然后刚刚我们统计了数量,直接乘法原理乘一下就好了代码//By...原创 2018-08-31 18:30:39 · 207 阅读 · 0 评论 -
BZOJ2818&&洛谷P2568 GCD
欧拉线性筛+前缀和我们不难发现若两个数互质,则可以给这两个数乘上一个质数使其满足题意,若两个数的gcd是质数,那么他们就可以除以这个质数,然后就又变成了前面的情况,所以我们不难发现我们可以先线性筛出phi和质数表,然后对于每个i(i<=n)我们可以枚举质数表里的质数,只要i乘这个质数小于等于n,那么i前面的与i互质的数乘这个质数也不会大于n,然后就可以ans+=phi,然后我们就发现,我...原创 2018-08-31 15:26:07 · 233 阅读 · 0 评论 -
BZOJ2190&&洛谷P2158 [SDOI2008]仪仗队
欧拉函数,发现在一条线上的点只能看到一个,所以我们能看到的就是gcd(x,y)=1的点,然后我们把这些点全弄到她所在的斜率与x=n还有y=n这两条线的交点上,然后我们发现x=n与y=n是对称的,然后坐标就是gcd(x,n)=1的情况下的x,然后由φ(n)个,y=n同理,所以就是2*φ(n),然后发现x=y这个线没有筛到,所以+1,坐标从0开始,记得n-1代码#include<cma...原创 2018-08-31 11:08:48 · 241 阅读 · 0 评论 -
BZOJ4807 車
高精组合数机房大佬一句话:相当于是将max(n,m)当做棋盘的列数,然后将棋盘压成一行,就相当于在max(n,m)里取出来min(n,m)个位置,就是组合数C然后我们就将每个数质因数分解,然后删去除数的质因子,将剩下的数乘起来,用高精代码//By AcerMo#include<cmath>#include<cstdio>#include<cst...原创 2018-08-28 09:51:57 · 209 阅读 · 0 评论 -
洛谷P1027 Car的旅行路线
几何+最短路我们根据已给的三个坐标,通过勾股定理,确认第四个点,然后SPFA时判断是不是同一个城市就行了代码//By AcerMo#include<cmath>#include<queue>#include<cstdio>#include<cstring>#include<iostream>#include<...原创 2018-08-20 09:56:26 · 177 阅读 · 1 评论 -
BZOJ1123&&P3469 [POI2008]BLO-Blockade
不难发现,一个点对其他点有影响,他必然是割点,然后就Trajan+乘法原理就行了代码//By AcerMo#include<cmath>#include<stack>#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>...原创 2018-08-16 20:01:11 · 201 阅读 · 0 评论 -
CF1017C The Phone Number
Dilworth定理了解一下?同机房大佬发现,大概是将1~n每(sqrt(n)+1/(sqrt(n))分一段,但是后面那个1/sqrt(n)太小,可以忽略,然后就每sqrt(n)分一段,结果就过了代码//By AcerMo#include<cmath>#include<cstdio>#include<cstring>#include<...原创 2018-08-16 11:03:46 · 230 阅读 · 0 评论 -
纪中OJ 5773 【NOIP2008模拟】简单数学题
推公式的毒瘤题看他给的这个公式 (n-t/2)/(n-t)∈(正整数)我们转化一下(n-t/2)/(n-t)=x -> (n-t+t/2)/(n-t)=x -> (t/2)/(n-t)=x-1t/(n-t)=2*(x-1) -> t=2*(x-1)*(n-t) -> t=2*(x-1)*n-2*(x-1)*tt*(1+...原创 2018-08-08 18:35:04 · 360 阅读 · 0 评论 -
BZOJ2463&&洛谷P4136 谁能赢呢?
发现,如果n是奇数,那么n^2也是奇数,那么在最优策略下,先手会走第一步,所以n是奇数先手赢,n是偶数后手赢代码//By AcerMo#include<cstdio>#include<iostream>using namespace std;int main(){ int n; while (cin>>n) { ...原创 2018-08-02 08:20:05 · 227 阅读 · 0 评论 -
BZOJ2456mode
SB思路题两两不同相互抵消,剩下的就是那个众数代码//By AcerMo//Mod 尹神,尹神太巨了,尹神又切题了,%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% #include<cstdio>using namespace std;signed main(){ int a,b=-1,c=0,n; scanf("%d",&n);...原创 2018-09-01 20:29:30 · 187 阅读 · 0 评论 -
BZOJ1968&&洛谷P1403 [AHOI2005]约数研究
一道小数论题我们不难发现对于一个数i(1<=i<=n),它的倍数a(1<=a<=n),有n/i个,所以我们只需要枚举i,然后累加n/i就好了代码//By AcerMo#include<cmath>#include<cstdio>#include<cstring>#include<iostream>#in...原创 2018-08-30 11:06:57 · 197 阅读 · 0 评论 -
BZOJ2751&&洛谷P2220[HAOI2012]容易题
容易题 呵tui~毒瘤数学题思路我们考虑没有限制元素的情况,每个集合都是1~na1∗b1∗...∗m1+a1∗b1∗...∗m2...a_1*b_1*...*m_1+a1*b_1*...*m2...a1∗b1∗...∗m1+a1∗b1∗...∗m2...发现可以合并成(a1+a2+...+an)∗(b1+b2+...+bn)∗...∗(m1+m2+...+mn)(a_1+a_2...原创 2018-10-17 17:05:30 · 268 阅读 · 0 评论 -
codeforces312B
数学第一个人能先射中的概率有第一次就射中的概率 a前两次两个人都没射中,第三次射中 (1−a)∗(1−b)∗a(1-a)*(1-b)*a(1−a)∗(1−b)∗a前四次两个人都没射中,四五次射中(1−a)2∗(1−b)2∗a(1-a)^2*(1-b)^2*a(1−a)2∗(1−b)2∗a然后以此类推,最终结果就是这些相加,然后这样可以一直加下去,所以我们定义一个下界,我用的1e-9...原创 2018-09-21 07:52:55 · 185 阅读 · 0 评论 -
BZOJ4517P4071 [SDOI2016]排列计数
错排+组合数不难发现把稳定的m个数除掉后,就是一个错排问题,错排的递推式是D[i]=(i-1)*(d[i-1]+d[i-2])具体证明自己去翻一翻别的博客,我后续也会写但是这m个位置是不固定的,所以我们可以在n个位置里任意选m个也就是CnmC_n^mCnm,然后在剩下的n-m个位置里做错排也就是Dn−mD_{n-m}Dn−m,然后根据乘法原理总的方案数就是Cnm∗Dn−mC_n^m*D_{...原创 2018-09-25 11:43:24 · 212 阅读 · 0 评论 -
莫比乌斯反演[学习笔记]
莫比乌斯反演P.S.(参照Po姐的课件)首先See一个函数F(n)=sumd|nsumd|nsum_{d|n}f(d)根据F(n)的定义,kou以得到F(1)=f(1)F(2)=f(1)+f(2)F(3)=f(1)+f(3)F(4)=f(1)+f(2)+f(4)F(5)=f(1)+f(5)F(6)=f(1)+f(2)+f(3)...原创 2018-09-13 20:02:29 · 225 阅读 · 0 评论 -
BZOJ1008&&洛谷P3197 [HNOI2008]越狱
快速幂裸题直接算逃跑的方案数不好算,我们可以用总方案数-合法方案数总方案数是什么呢 ?一共有n个房间,m个信仰,那么每个房间都可能是任意一种,所以是m^n种方案数合法的方案数呢?任意两个相同信仰不能挨着,那么第一个房间有m种选法,第一个房间是除了第一个房间外所有的都能选,所以是m-1种,第三个房间不能选第二个的,也是m-1种,所以合法方案数是(m-1)^(n-1)*m相减就好了...原创 2018-09-07 14:04:33 · 191 阅读 · 0 评论 -
秦九韶算法[学习笔记]
实现代码inline int calc(int n,int f[],int x){ int s=f[n]; for (int i=n;i;i--) s=f[i-1]+s*x; return p;}或者inline int che(int x){ int s=0; for (int i=n;i;i--) sum=(a[i]+s...原创 2018-09-12 11:00:50 · 1435 阅读 · 0 评论 -
BZOJ3612&&P4104 [HEOI2014]平衡
关于整数划分数我们定义f[i][j]表示将i拆成j个整数相加的形式,并且最大数不大于j,有哪些情况可以转移呢?我们考虑转移之后最小值大于1的情况:将每个数都+1 对应着f[i-j][j]然后是最小值等于1的情况,每个数都+1然后在单独拿出来一个1 对应着f[i-j[j-1]发现这两种情况就能覆盖所有情况,所以f[i][j]=f[i-j][...原创 2018-09-12 10:31:59 · 252 阅读 · 0 评论 -
BZOJ1041&&洛谷P2508 [HAOI2008]圆上的整点
%%%%PoPoQQQ大爷由这个x^2+y^2=r^2化简可得 y^2=(r-x)(r+x),若d=gcd(r-x,r+x)则gcd((r-x)/d与(r+x)/d)=1,二者相乘为完全平方数,则二者一定都为完全平方数令r-x=d*u^2,r+x=d*v^2,则有u,v互质,且u<v其可得x=d(v^2-u^2)/2,y=d*u*v,r=d*(u^2+v^2)/2于是...原创 2018-09-03 19:45:30 · 245 阅读 · 0 评论 -
BZOJ 3629&&洛谷4397[JLOI2014] 聪明的燕姿
看那么多人给燕姿打call,那就默默+1题里说的很清楚,约数和等于s的数是答案先普及一些东西一个数可以分解为P1^a1*P2^a2*.......*Pn^an,其中P1~Pn都是素数,(算术基本定理:任何一个大于 1 的自然数(不为素数)可以分解成一些素数的乘积;并且在不计次序的情况下,这种分解方式是唯一的。),这个定理,我们可以说是显然的,我们从2开始,如果他MOD2==0,说明可以...原创 2018-04-03 17:44:43 · 371 阅读 · 0 评论 -
BZOJ2257&&洛谷P4571 [JSOI2009]瓶子和燃料
如果外星人是我的话,肯定是随便把一个瓶子装满,然后倒到一个最小的瓶子里,然后留下最少的部分,然后发现这个特别像GCD的过程,从大数中抹去小数,直到比小数还小,那么很显然,这道题有k个瓶子,那就是求k个瓶子的最大公约数呗,然后发现n只有1K,所以我就暴力处理了每个数的因子,然后存到一个数组里,从大到小排了个序,然后开始统计,第一个出现次数大于等于k的数,就是最大公约数代码//By Acer...原创 2018-09-02 14:58:35 · 213 阅读 · 0 评论 -
BZOJ3505&&洛谷P3166 [CQOI2014]数三角形
发现除了三点共线,其他都行,那就减去三点共线的情况就好了代码//By AcerMo#include<cmath>#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#define lli long long intusing n...原创 2018-08-01 16:55:49 · 258 阅读 · 0 评论 -
BZOJ1042&&洛谷P1450 [HAOI2008]硬币购物
容斥原理+背包dp每次做背包肯定会tle那么我们可以重复利用以前的条件,先做完全背包,预处理,然后减去不合法状态代码//By AcerMo#include<cmath>#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#...原创 2018-07-31 15:49:40 · 215 阅读 · 0 评论 -
BZOJ1853&&P2567 [SCOI2010]幸运数字
一开始以为是数位dp然后发现不可做,因为每一位不固定,然后就想到了dfs枚举,会TLE令x记录当前已经枚举到了第几个数,y记录已经选了几个数,z表示这几个数的最小公倍数 剪枝:当最小公倍数大于上界r时返回代码//By AcerMo#include<cmath>#include<cstdio>#include<cstring>#inc...原创 2018-07-31 15:33:57 · 210 阅读 · 0 评论 -
一些数学的小知识
这些东西都挺显然的,我不再给出证明关于位运算(a|b)-(a&b)=a^b(a&b)+(a|b)=a+b关于整除((a/b)/c)=a/(b*c)ceil(a/b)=(a+b-1)/b=((a-1)/b)+1关于mod(a*g)%(b*g)=(a%b)*g(a%(b*c))%c=a%ca%b=a-(a/b)*b...原创 2018-06-18 16:44:58 · 307 阅读 · 0 评论 -
中国剩余定理(CRT,孙子定理)
首先自豪一波然后%%%%%一波julao孙子算经然后开始正题2333逃问题引入:有一群猪,三只三只的分,剩两只,五只五只的分,剩三只,七只七只的分,剩两只,求一共几只猪?暴力求解:我们设一共有n只猪,那么n%3=2,n%5=3,n%7=2,因为n%3=n%7,所以n%(3*7)=2,所以n的个位可以为3/4/5/6/7/8/9/0,因为n%5=3,所以n的个位必定为3或8,所以结果可以是23或12...原创 2018-06-18 16:34:33 · 1128 阅读 · 0 评论 -
线性求乘法逆元
乘法逆元出门跳坑欧拉函数证明出门打的欧拉函数代码实现出门小黄车许多题会用到乘法逆元这个玄学的东西,求一次还好,但是如果求1~p-1在mod p意义下的逆元,单个求的log级别显然不可取,所以我门需要线性处理一下先说几个单个求的思路方法一:先预处理欧拉函数,然后用快速幂求a^(φ(p)-1)代码(线性欧拉函数)void getphi() { int...原创 2018-06-18 15:37:53 · 1001 阅读 · 0 评论 -
欧拉函数的代码实现
欧拉定理证明出门左转线性筛素数出门直走单个筛欧拉函数由欧拉函数公式直接在给n分解质因数时连乘就好代码int phi(int n){ int res=n,a=n; for(int i=2;i*i<=a;i++) { if(a%i==0) { res=res/i*(i-1);//先除后乘防止溢出 ...原创 2018-06-18 14:51:25 · 2112 阅读 · 0 评论 -
线性筛素数
问题引入:在诸多问题中我们可能需要判断一个数是不是质数,但是如果给定的区间很大,那么如果我们用找因子的方式找素数会非常的慢,所以我们需要一个高效的筛素数的方法方法一:暴力枚举因子我们将1~n的数枚举一下它的因子,从2~sqrt(n),若能整除,则一定不是质数代码void ss(int n){ int vis[M]; for (int i=1;i<=n;i++) vis[i]=1; ...原创 2018-06-18 11:19:59 · 387 阅读 · 0 评论 -
乘法逆元
放在前面的内容:我们知道在mod p 意义下的加减乘法运算都不会影响mod之后的值(就是说运算结果封闭在mod p的剩余系里),但是除法会,所以我们就引入了一个新的东西叫做逆元,用来算mod p意义下的除法逆元定义:若a*x ≡ 1 (mod p),那么我们说x是a在mod p意义下的逆元,记为x=a^(-1),当且仅当a,p互质时,x存在情况1:p为质数,显然当a不为p的倍数时,两数互质,那么由...原创 2018-06-18 09:54:29 · 286 阅读 · 0 评论 -
扩展欧几里得&&裴蜀定理
定理内容:对于方程a*x+b*y=GCD(a,b),存在整数解x,y 证明过程:由GCD(a,b)=GCD(a%b,b),可得x*y+b*(a%b)=GCD(b,a%b),将a%b->a-(a/b)*b,得到x*b+(a-(a/b)*b)*y=GCD(a%b,b),化简得到b*x-y*(a/b)*b+a*y=GCD(a%b,b),将同类项合并得到a*y+b*(x-(a/b)*y),此时...原创 2018-06-18 08:49:18 · 346 阅读 · 0 评论 -
欧拉函数&&欧拉定理
定理内容:若整数a,n互质,则a^φ(n)≡1 (mod n)要先知道:性质1:φ(n)表示,在(1~n-1)中,与n互质的数的个数,φ(n)=n*(1-1/q)*…*(1-1/p),其中p,q均为能被n整除的质因子证明1:假设n只有q和p两个质因子,那么显然在<=n的范围内,q和p的倍数都不与n互质,那么q的倍数有几个呢?n/q个,最多能除掉几个q就有几个q的倍数,那么p也同理...原创 2018-06-17 20:11:00 · 1840 阅读 · 0 评论 -
费马小定理
定理内容:若存在整数a,p,满足GCD(a,p)=1,即a,p互质,那么a^(p-1)≡1 (mod p),即在上述条件下,a^(p-1)%p=1证明前需要知道一些性质性质1:若存在三个整数a,b,c,以及一个和c互质的整数m,那么如果a*c≡b*c (mod m),那么a≡b (mod m)证明1:若a*c≡b*c (mod m),则a*c%m = b*c%m,那么(a*c-b*...原创 2018-06-17 16:55:30 · 2183 阅读 · 0 评论 -
洛谷 P1865 A%B
emmm线性筛+前缀和水题代码#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>using namespace std;int n,m,emm[1000500];int sum[1000500];inline void xxss(int a){ ...原创 2018-04-15 22:15:55 · 268 阅读 · 0 评论 -
洛谷P1044栈(卡特兰数)
题意不再赘述这道题是一道卡特兰数的应用,为何是卡特兰数呢?我们观察一下整个过程,假设现在要最后站的是p,比他小的先出栈的有p-1个,所以方案数是f[p-1],比他大的有n-p个,所以方案数为f[n-p],我们会发现这两部分互相影响,根据乘法原理,总方案数应该为f[p-1]*f[n-p],p的取值有n种,这n种互不影响,所以根据加法原理,循环相加,得到f[n]=f[0]*f[n-1]*...*f[n...原创 2018-06-19 14:52:00 · 410 阅读 · 0 评论 -
BZOJ1407[Noi2002]Savage
emm,扩欧的裸题,我们不难发现,如果两个野人不相遇,当且仅当他们能走到一个洞穴时,双方都死了或者根本走不到一起所以我们可以列出> now[i]+pass[i]*k ≡ now[j]+pass[j]*k (mod m)> now[i]-now[j] ≡ (pass[j]-pass[i])*k (mod m)这时我们发现这时一个同余式,可以用ecgcd求解k的值,来判断他们是否能在寿命内...原创 2018-07-02 08:31:29 · 193 阅读 · 0 评论 -
BZOJ3209&&洛谷P4317 花神的数论题
数位dp(喷血。如果枚举1的个数,那么这道题可以看做求1−n的二进制表示中有x个1的数字的个数,计算出sum[i] 为恰好有i个的方案数。设 f[i][j]表示以0开头的 i 位数中1的个数为 j 的数的数量,g[i][j]表示以1开头的 i 位数中1的个数为 jj 的数的数量则f[i][j]=f[i-1][j]+g[i-1][j],g[i][j]=f[i-1][j-1]+g[i-1]...原创 2018-07-30 16:46:56 · 240 阅读 · 0 评论 -
BZOJ2705&&洛谷P2303 [SDOi2012]Longge的问题
暴力硬拆居然有65分,神奇了说说正解,磨了我一下午我们看看先暴力如何求解,循环从1到n然后sum+=gcd(i,n)然后我们列出来一个式子ans=Σ(i=1~n)gcd(i,n)不难想到,gcd都是n的因子,所以我们又可以枚举因子ans=Σ(i=1~n&&n%i==0) i*(Σ(j=1~n,gcd(j,n)==i)也就是说看看与n的gcd是i的数有多少...原创 2018-07-26 17:11:31 · 224 阅读 · 0 评论