贺题记录(数学+图论+dp+树型问题)

数论水习

题单位置:洛谷.数论

1.P1965转圈游戏

solution:思路十分简单答案就是 x + m ∗ 1 0 k m o d    ( n ) x+m*10^k \mod (n) x+m10kmodn,快速幂练手题
(Done)

2.P5431乘法逆元2

solution:一道在线转离线的题目,设 s i = ∏ i = 1 n a i , 那 么 很 容 易 知 道 s_i = \prod_{i=1}^na_i ,那么很容易知道 si=i=1nai 1 a i = s i − 1 ∗ 1 s i \frac{1}{a_i}=s_i-_1*\frac{1}{s_i} ai1=si1si1 ,那么就可以线性求逆元了
(Done)

3.P2613有理数取余

solution:对于求 a b ≡ x ( m o d p ) \frac{a}{b}\equiv x\pmod{p} bax(modp)的x,我们可以进行一些小的转化:

1.上式可以转化为$a\equiv bx\pmod{p} $
2.然后对于上面的式子还可以进一步转化为: b x 1 ≡ 1 ( m o d p ) bx_1\equiv 1\pmod{p} bx11(modp),其中 x 1 x_1 x1=x/a

于是我们可以通过 e x g c d exgcd exgcd求出 x 1 x_1 x1,然后答案就是 x 1 ∗ a x_1*a x1a

然后,还需要对于无解情况的分析,即当 b ≡ 0 ( m o d p ) b\equiv 0\pmod{p} b0(modp)

4.P1082同余方程

solution:问题可以转化为 a x + b y = 1 ax+by=1 ax+by=1其中b为膜数,于是就是一个裸的扩欧了

5.P5656二元一次方程

solution:扩欧板子了属于是,但是需要补充的是对于有解的不定方程的解的个数以及最大最小值

首先是解的个数,如果我们得到了一组二元解$(x,y) $,那么我们可以通过加或减去[gugugu]

6.私题(I’m)

把所有武器变为同一个武器,那么这个武器造成伤害的概率就是P= ∑ i = 1 n p i n \frac{\sum\limits_{i=1}^np_i}{n} ni=1npi,然后根据概率枚举双方收到的伤害,并进行计算。

最后答案为: ∑ i = 1 A ∑ j = 1 B [ i < j ] ( A i ) P i ( 1 − P ) A − i ( B j ) P j ( 1 − P ) B − j \sum\limits_{i=1}^A\sum\limits_{j=1}^B[i<j]\dbinom{A}{i}P^i(1-P)^{A-i}\dbinom{B}{j}P^j(1-P)^{B-j} i=1Aj=1B[i<j](iA)Pi(1P)Ai(jB)Pj(1P)Bj
需要通过前缀和以及 L u c a s Lucas Lucas定理进行优化

又因为B十分的大,我们可以考虑容斥,计算A小于B的情况,那么我们只需要枚举A即可,然后需要求出 ( 1 − p ) B (1-p)^B (1p)B,而b算比较大的数,所以我们要根据扩展欧拉定理进行取模,详细见下面
(Done)

7.CF559C Gerald and Giant Chess

solution:

一道组合递推题,老师考过一道类似的题目,首先我们要知道一个知识:一个 n ∗ m n*m nm的矩形中,我们想要从 ( 0 , 0 ) 到 达 ( n , m ) (0,0)到达(n,m) (0,0)(n,m)(只允许向上或者向右),我们有 ( n n + m ) \dbinom{n}{n+m} (n+mn)种方案,,同理,从 ( x 1 , y 1 ) 到 ( x 2 , y 2 ) (x_1,y_1)到(x_2,y_2) (x1,y1)(x2,y2)的方案数为 ( x 2 − x 1 x 2 − x 1 + y 2 − y 1 ) \dbinom{x_2-x_1}{x_2-x_1+y_2-y_1} (x2x1+y2y1x2x1)

于是对于本题,我们设 f i f_i fi表示到第i个黑棋的方案数,我们把最后的目的地当做一个黑棋,根据乘法原理以及减法原理可以知道 f i f_i fi= ( x i − 1 x i + y i − 2 ) − ∑ j = 0 i − 1 f j ∗ ( x i − x j x i − x j + y i − y j ) \dbinom{x_i-1}{x_i+y_i-2}-\sum\limits_{j=0}^{i-1}{f_j*\dbinom{x_i-x_j}{x_i-x_j+y_i-y_j}} (xi+yi2xi1)j=0i1fj(xixj+yiyjxixj)最后答案就是 f n + 1 f_{n+1} fn+1

8.P5091扩展欧拉定理
solution:

根据欧拉定理我们知道在a与b互质的时候有 a p h i b ≡ 1 ( m o d b ) a^{phi_b}\equiv1\pmod{b} aphib1(modb)
其中phi为欧拉函数于是设 b   m o d   k = t b\bmod k=t bmodk=t

那么有

b = s ∗ k + t b=s*k+t b=sk+t

然后又根据欧拉定理,那么就可以得到 a b ≡ a b   m o d   ϕ ( k ) ( m o d k ) a^b\equiv a^{b\bmod \phi(k)}\pmod{k} ababmodϕ(k)(modk)

而扩展欧拉定理是用来处理a,b不互质的情况,不考虑证明直接上结论: a b ≡ a ( b   m o d   ϕ ( m ) ) + ϕ ( m ) ( m o d m ) a^b\equiv{a^{(b\bmod \phi(m))+\phi(m)}}\pmod{m} aba(bmodϕ(m))+ϕ(m)(modm)但是需要特判一下b小于 ϕ ( m ) \phi(m) ϕ(m)的时候是无解的

对于欧拉函数phi的求解见链接
(Done)

9.P2421 荒岛野人

solution:

其实就是找最小的M,使得对于任意i,j,同余方程:

C i + x ∗ P i ≡ C j + x ∗ P j ( m o d M ) C_i+x*P_i\equiv C_j+x*P_j\pmod{M} Ci+xPiCj+xPj(modM)无解,x> m i n ( L i , L j ) min(L_i,L_j) min(Li,Lj),一共有 n 2 n^2 n2个如是同余方程,化为二元一次方程,根据 e x g c d exgcd exgcd断无解。需要枚举M

tips:化为二元一次方程为 x ∗ ( P i − P j ) + y ∗ M = C j − C i x*(P_i-P_j)+y*M=C_j-C_i x(PiPj)+yM=CjCi
[Done]

10.P2155 沙拉公主的疑惑

solution:

根据欧几里得公式可以知道 g c d ( a , b ) = g c d ( a + b ∗ k , b ) gcd(a,b)=gcd(a+b*k,b) gcd(a,b)=gcd(a+bk,b),所以我们把 N ! N! N!分为 k = N ! M ! k=\frac {N!}{M!} k=M!N!段,如果我们在一段中找到了一个与 M ! M! M!互质的数,那么这k段中,每一段都可以找到一个于是答案就是 k ∗ ϕ ( m ! ) k*\phi(m!) kϕ(m!)
[Done]

11.P4139 上帝与集合的正确用法

solution:

我们可以采取扩展欧拉公式进行降幂,我们知道$a^b \equiv a^{b\bmod \phi§+\phi§}\pmod p $,于是我们可以直接递归下去求解就可以了
[Done]

tips:欧拉函数肯定用欧拉筛啦,就是在欧拉线性筛质数的时候筛见code

12.P2398 GCD SUM

solution:

先看个有趣的资料叫做欧拉反演

根据以上知识我们知道 g c d ( i , j ) = ∑ d ∣ g c d ( i , j ) ϕ ( d ) gcd(i,j)=\sum\limits_{d|gcd(i,j)}\phi(d) gcd(i,j)=dgcd(i,j)ϕ(d),也等价于 ∑ d ∣ i , j ϕ ( d ) \sum \limits_{d|i,j}\phi(d) di,jϕ(d),于是最后我们可以枚举d,然后看n中有多少个i,j满足 d ∣ i , j d|i,j di,j,也就是 n i ∗ n i \frac{n}{i}*\frac{n}{i} inin个,于是 a n s = ∑ d = 1 n ϕ ( d ) ∗ n i 2 ans=\sum\limits_{d=1}^{n}\phi(d)*\frac{n}{i}^2 ans=d=1nϕ(d)in2

为巩固知识进行下简单证明:
我们构造函数 f ( n ) = ∑ d ∣ n p h i d f(n)=\sum\limits_{d|n}phi_d f(n)=dnphid,那么 f ( n m ) = ∑ d ∣ n m ϕ ( d ) = ∑ d ∣ n ϕ ( d ) ∗ ∑ d ∣ m ϕ ( d ) = f ( n ) ∗ f ( m ) f(nm)=\sum\limits_{d|nm}\phi(d)=\sum\limits_{d|n}\phi(d)*\sum\limits_{d|m}\phi(d)=f(n)*f(m) f(nm)=dnmϕ(d)=dnϕ(d)dmϕ(d)=f(n)f(m),于是我们构造出来的函数是积性函数,那么对于 n n n的每一个质因子 f ( p c ) = ϕ ( 1 ) + ∑ i = 1 c ϕ ( p ) i f(p^c)=\phi(1)+\sum\limits_{i=1}^{c} \phi(p)^i f(pc)=ϕ(1)+i=1cϕ(p)i

tips: ϕ ( p 2 ) = p ∗ ( p − 1 ) \phi(p^2)=p*(p-1) ϕ(p2)=p(p1)
于是: f ( p c ) = ϕ ( 1 ) + ϕ ( p ) + … … + ϕ ( p c ) = 1 + ( p − 1 ) + p ∗ ( p − 1 ) + ( p 2 − p ) + … … + ( p k − p k − 1 ) f(p^c)=\phi(1)+\phi(p)+……+\phi(p^c)=1+(p-1)+p*(p-1)+(p^2-p)+……+(p^k-p^{k-1}) f(pc)=ϕ(1)+ϕ(p)++ϕ(pc)=1+p1+p(p1)+(p2p)++pkpk1为等差数列+1,于是得到 f ( p c ) = p c f(p^c)=p^c f(pc)=pc,再根据算法基本定理便可得证

13.#21252. 「NOIP2021 国庆集训 B 组 Day1」逛动物园

solution:

这是一个树的结构证明见后面

原来每个位置肯定是有 3 n 3^n 3n种情况我们考虑每次一操作后的变化

1.u>v u胜利 P ( A ) = 1 3 P(A)=\frac{1}{3} P(A)=31

2.u==v u胜利 P ( B ) = 1 3 P(B)=\frac{1}{3} P(B)=31

3.v>u v胜利 P ( C ) = 1 3 P(C)=\frac{1}{3} P(C)=31

综上 发现每次操作过后u存活的概率为 P ( u ) = 2 3 P(u)=\frac{2}{3} P(u)=32,而v为 1 3 \frac{1}{3} 31,意思是u的方案数为 s u ∗ 2 3 s_u*\frac{2}{3} su32,v的方案数为 s v ∗ 1 3 s_v*\frac{1}{3} sv31

有了这个思路就好办了,我们设u存活下来的概率为 h x h_x hx,那么对于操作二,ans= h u ∗ 3 n h_u*3^n hu3n,而每次操作1的话,就要在v的子树中的每个节点 h x ∗ 1 3 h_x*\frac{1}{3} hx31,u则是子树内节点的 h x ∗ 2 3 h_x*\frac{2}{3} hx32(因为最后他们会和v打,胜率为 2 3 \frac{2}{3} 32,v同理)然后就是线段树维护甚至不需要树链剖分了

树形结构证明:我们设 f a v = u fa_v=u fav=u,又因为无论输赢最后u节点还是会在,并且以后u进行操作也会对u,v的权值造成影响,所以得证可以为树形结构

code

14.「NOIP2021 国庆集训 B 组 Day2」#子集问题

sol:看来复习数学多少还是有点用。

我们考虑当 n = = 4 n==4 n==4 n = = 5 n==5 n==5的过程中怎样转变的。根据手模拟,可以知道

n = = 4 n==4 n==

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值