自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 斗地主(矩阵快速幂)

地斗主思路看到这nnn非常大,感觉一定是个结论公式题,但是感觉又不像是排列组合,于是可以考虑矩阵快速幂了,所以关键就是得得到递推公式了。我们将棋盘分成两部分n−num,numn - num, numn−num,num我们假定显然对num=1,2,3,4,5num = 1, 2, 3, 4, 5num=1,2,3,4,5分别有1,4,2,3,2,31, 4, 2, 3, 2, 31,4,2,3,2,3种分法,对应到原来一整块的部分上也就是ansn=ansn−1+4ansn−2+2ansn−3+3ansn

2020-08-12 22:56:14 17

原创 P4449 于神之怒加强版

P4449 于神之怒加强版推式子∑i=1n∑j=1ngcd(i,j)h\sum_{i = 1} ^{n} \sum_{j = 1} ^{n} gcd(i, j) ^ hi=1∑n​j=1∑n​gcd(i,j)h=∑d=1ndh∑i=1nd∑j=1mdgcd(i,j)==1=\sum_{d = 1} ^{n} d ^ h \sum_{i = 1} ^{\frac{n}{d}} \sum_{j = 1} ^{\frac{m}{d}}gcd(i, j) == 1=d=1∑n​dhi=1∑dn​​j=

2020-08-07 19:33:50 37

原创 HDU 6836 Expectation(矩阵生成树 + 期望)

Expectation思路题目要求每个生成树边权&\&&的期望值,假设当前这颗生成树对二进制数的第iii位有贡献,则这个位上的构成生成树的边权值一定是111,所以我们可以跑313131位二进制数的,矩阵树,每个位上的贡献度等于,这个位上的生成树数量乘以这个位上的2次幂,最后再跑一边生成树计数,然后即可求得期望。代码/* Author : lifehappy*/#pragma GCC optimize(2)#pragma GCC optimize(3)#includ

2020-08-07 17:24:55 64

原创 luogu P6178 【模板】Matrix-Tree 定理

luogu P6178 【模板】Matrix-Tree 定理1.无向图假设现在给定一个图 GG .度数矩阵D:若存在边$ (x,y,z)(x,y,z)$ ,则 D[x][x]+=z;D[y][y]+=z;D[x][x]+=z;D[y][y]+=zD[x][x]+=z;D[y][y]+=z;D[x][x]+=z;D[y][y]+=zD[x][x]+=z;D[y][y]+=z;D[x][x]+=z;D[y][y]+=z;邻接矩阵C:若存在边 (x,y,z)(x,y,z)(x,y,z)(x,y,z)(x,

2020-08-07 17:11:15 34

原创 高斯消元求行列式值(inv)板子

ll A[110][110];const int mod;ll quick_pow(ll a, ll n, ll mod) { ll ans = 1; while(n) { if(n & 1) ans = ans * a % mod; a = a * a % mod; n >>= 1; } return ans;}ll inv(ll a) { return quick_pow(a, mo

2020-08-07 16:41:30 29

原创 HDU 6833 A Very Easy Math Problem

A Very Easy Math Problem推式子∑ai=1n∑a2=1n⋯∑ax=1n(∏j=1xajk)f(gcd(a1,a2,…,ax))×gcd(a1,a2,…,ax)\sum_{a_i = 1} ^{n} \sum_{a_2 = 1} ^{n} \dots \sum_{a_x = 1} ^{n} \left(\prod_{j = 1} ^{x} a_j ^ k \right)f(gcd(a_1, a_2, \dots, a_x))\times gcd(a_1, a_2, \dots, a

2020-08-07 15:22:45 166

原创 P1829 [国家集训队]Crash的数字表格(推了好久的mobius反演)

P1829 [国家集训队]Crash的数字表格 / JZPTAB推导过程∑i=1n∑j=1mlcm(i,j)\sum_{i = 1} ^{n} \sum_{j = 1} ^{m} lcm(i, j)i=1∑n​j=1∑m​lcm(i,j)=∑i=1n∑j=1mijgcd(i,j) = \sum_{i = 1} ^{n} \sum_{j = 1} ^{m} \frac{ij}{gcd(i, j)}=i=1∑n​j=1∑m​gcd(i,j)ij​=∑d=1n1d∑i=1n∑jmij(gcd(i,j)==

2020-08-05 21:37:09 45

原创 P3327 [SDOI2015]约数个数和 (mobius反演)

P3327 [SDOI2015]约数个数和推导过程求∑i=1n∑j=1md(ij)\sum_{i = 1} ^{n} \sum_{j = 1} ^{m} d(ij)∑i=1n​∑j=1m​d(ij)=∑i=1n∑j=1m∑x∣i∑y∣jgcd(x,y)==1= \sum_{i = 1} ^{n} \sum_{j = 1} ^{m} \sum_{x \mid i} \sum_{y \mid j} gcd(x, y) == 1=i=1∑n​j=1∑m​x∣i∑​y∣j∑​gcd(x,y)==1改成枚举x

2020-08-05 18:13:30 48

原创 追债之旅(Dijkstra最短路)

追债之旅思路最短路问题,考虑DijkstraDijkstraDijkstra,用一个二维dis[i][j]dis[i][j]dis[i][j]数组,表示第iii天到达jjj号点的最小花费,disdisdis数组的更新方式改为if(dis[day][to]>dis[day−1][now]+value[to]+cost[day])if(dis[day][to] > dis[day - 1][now] + value[to] + cost[day])if(dis[day][to]>dis[d

2020-08-05 12:11:34 672

原创 P1447 [NOI2010]能量采集(mobius反演)

P1447 [NOI2010]能量采集式子化简显然题目就是要我们求∑i=1n∑j=1m2gcd(i,j)−1\sum_{i = 1} ^{n} \sum_{j = 1} ^{m} 2gcd(i, j) - 1∑i=1n​∑j=1m​2gcd(i,j)−1=2∑i=1n∑j=1mgcd(i,j)−nm = 2\sum_{i = 1} ^{n} \sum_{j = 1} ^{m} gcd(i, j) - nm=2i=1∑n​j=1∑m​gcd(i,j)−nm转化为我们要求∑i=1n∑j=1mgcd(i,

2020-08-04 21:51:57 45

原创 P2260 [清华集训2012]模积和,P2834 能力测验(二维除法分块)

P2260 [清华集训2012]模积和推导过程我们假定n<=mn <= mn<=m∑i=1n∑j=1m(nmod  i)(mmod  j),i≠j\sum_{i = 1} ^{n} \sum_{j = 1} ^{m} (n\mod i)(m \mod j), i \not= ji=1∑n​j=1∑m​(nmodi)(mmodj),i​=j=∑i=1n∑j=1m(nmod  i)(mmod  j)−∑k=1n(nmod  k)(mmod  k) = \sum_{i = 1} ^{

2020-08-04 19:36:57 52

原创 P2257 YY的GCD (莫比乌斯反演)

P2257 YY的GCD思路求∑i=nn∑j=1mgcd(i,j)==k(k∈prime)\sum_{i = n} ^{n} \sum_{j = 1} ^{m} gcd(i, j) == k (k \in prime)∑i=nn​∑j=1m​gcd(i,j)==k(k∈prime)对上面式子进行化简:=∑k=1n∑i=1nk∑j=1mkgcd(i,j)==1,k∈prime= \sum_{k = 1} ^{n} \sum_{i = 1} ^{\frac{n}{k}}\sum_{j = 1} ^{\f

2020-08-04 11:21:14 48

原创 mobius初步

求 ∑i=1n∑j=1m(gcd(i,j)==1)\sum_{i = 1} ^{n} \sum_{j = 1} ^{m} (gcd(i, j) == 1)∑i=1n​∑j=1m​(gcd(i,j)==1)我们引入一个知识∑d∣nμ(d)=(n==1)\sum_{d \mid n} \mu(d) = (n == 1)∑d∣n​μ(d)=(n==1)所以gcd(i,j)=∑d∣gcd(i,j)μ(d)gcd(i, j) = \sum_{d \mid gcd(i, j)} \mu(d)gcd(i,j)=∑..

2020-08-03 22:13:41 46

原创 购物(DP)

购物思路最优值问题,我们考虑dpdpdp,dp[i][j]dp[i][j]dp[i][j]表示前iii天已经购买了jjj个糖果的花费最小值,显然dp[i][j]dp[i][j]dp[i][j]可以从dp[i−1][k]dp[i - 1][k]dp[i−1][k]转移过来,具体转移过程看代码注释部分吧。对于答案我们显然是在第nnn天刚好购买了nnn个糖果,这样是最优的,对于每一天购买糖果,我们一定是优先选择花费更小的,这样才能保证最优值.代码/* Author : lifehappy*/#p

2020-08-03 18:28:50 62

原创 牛客小白月赛12:月月给华华出题(欧拉函数)

月月给华华出题思路∑i=1nigcd(i,n)\sum_{i = 1} ^{n} \frac{i}{gcd(i, n)}i=1∑n​gcd(i,n)i​=∑d∣n∑i=1nid(gcd(i,d)==d)= \sum _{d \mid n} \sum_{i = 1} ^{n} \frac{i}{d} (gcd(i, d) == d)=d∣n∑​i=1∑n​di​(gcd(i,d)==d)=∑d∣n∑i=1ndi(gcd(i,d)==1)= \sum_{d\mid n} \sum_{i = 1} ^{\

2020-08-01 20:54:23 42

原创 51nod 1188 最大公约数之和 V2(欧拉函数)

1188 最大公约数之和 V2思路用欧拉函数可以化简式子如下∑i=1n∑j=1i−1gcd(i,j)\sum_{i = 1} ^{n} \sum _{j = 1} ^{i - 1} gcd(i, j)i=1∑n​j=1∑i−1​gcd(i,j)=∑i=1n∑j=1igcd⁡(i,j)−(n+1)(n)2= \sum_{i = 1} ^{n} \sum_{j = 1} ^{i} \gcd(i, j) - \frac{(n + 1)(n)}{2}=i=1∑n​j=1∑i​gcd(i,j)−2(n+1)(

2020-08-01 20:24:01 36

原创 HDU 4983 Goffi and GCD(欧拉函数)

Goffi and GCD思路题目要求∑i=1n∑j=1ngcd(n−i,n)gcd(n−j,n)==nk\sum_{i = 1} ^{n} \sum _{j = 1} ^{n} gcd(n - i, n)gcd(n - j, n) == n ^ {k}∑i=1n​∑j=1n​gcd(n−i,n)gcd(n−j,n)==nk显然有gcd(n−i,n)<=ngcd(n - i, n) <= ngcd(n−i,n)<=n对于k>=3k >= 3k>=3直接可以特判000

2020-08-01 11:13:26 51

原创 HDU 2588 GCD(欧拉函数)

GCD思路题目要求,对于给定的n,mn, mn,m要求有多少数∑i=1ngcd(i,n)>=m\sum _{i = 1} ^{n} gcd(i, n) >= m∑i=1n​gcd(i,n)>=m我们可以对这个式子进行化简,通过枚举d=gcd(i,n)d = gcd(i, n)d=gcd(i,n)有∑d∣n∑i=1ngcd(i,d)==d\sum _{d \mid n} \sum _{i = 1} ^{n} gcd(i, d) == dd∣n∑​i=1∑n​gcd(i,d)==d=

2020-08-01 10:29:13 52

原创 小A的最短路

小A的最短路思路树上问题求两个点的最短距离,显然能用lcalcalca来进行lognlog_nlogn​的查询,引入了两个无边权的点,所以我们的路劲就可以规划成三种x−>y,x−>u−>v−>y,x−>v−>u>−yx -> y, x -> u -> v -> y, x -> v -> u >- yx−>y,x−>u−>v−>y,x−>v−>u>−y,只要在这三个当中取一个最小值

2020-07-31 15:14:46 37

原创 欧拉函数的性质及其证明

欧拉函数ppp是素数,则有ϕ(p)=p−1\phi(p) = p - 1ϕ(p)=p−1证明:显然。ppp是素数,n=pkn = p ^ kn=pk,则ϕ(n)=pk−pk−1\phi(n) = p ^ k - p ^ {k - 1}ϕ(n)=pk−pk−1证明:[1,n][1, n][1,n]内,ppp的约数有p,2p,3p,4p……(pk−1−1)pp, 2p, 3p, 4p……(p^{k - 1} - 1)pp,2p,3p,4p……(pk−1−1)p个,所以ϕ(n)=pk−1−(pk

2020-07-29 22:31:16 55

原创 SP5971 LCMSUM - LCM Sum

SP5971 LCMSUM - LCM Sum思路∑i=1nlcm(i,n)\sum_{i = 1}^{n}lcm(i, n)i=1∑n​lcm(i,n)=>∑i=1ningcd(i,n)=> \sum_{i = 1}^{n}\frac{i n}{gcd(i, n)}=>i=1∑n​gcd(i,n)in​=>n∑i=1nigcd(i,n)=> n\sum_{i = 1}^{n}\frac{i}{gcd(i, n)}=>ni=1∑n​gcd(i,n)i​我们按照

2020-07-29 18:31:50 44

原创 Xor Path

Xor Path思路先是看错题目,以为是所有的路径异或值的和,然后好像用了个假的print函数,一直wa,,,既然是异或,那么当一个点出现的次数是偶数次的时候它会被自己异或成零,也就是队整体的答案没有贡献度,所以我们只要统计有多少条路经过了这个点就行了。我们得到一个节点的每一个儿子的节点数量,然后再剩下不是当前节点中选择一个节点,两个建立一条边,计算得到当前节点的儿子连儿子构成的最短路对这个点的贡献度,然后再加上这个点与其儿子链接的贡献度即可,如果是奇数则异或上我们的答案,否则这个点将会对答案没有贡献

2020-07-29 16:46:02 49

原创 P2303 [SDOI2012] Longge 的问题

P2303 [SDOI2012] Longge 的问题思路我们显然可以枚举每一对数的gcdgcdgcd进行求解,进而我们有如下推导:=>∑i=1ngcd(i,n)=>\sum _{i = 1} ^ {n} gcd(i, n)=>i=1∑n​gcd(i,n)=>∑d∣nd∑i=1n(gcd(i,d)==d)=>\sum _{d \mid{n}} d \sum _{i = 1} ^ {n} (gcd(i, d) == d)=>d∣n∑​di=1∑n​(gcd(i,d)

2020-07-29 16:42:13 56

原创 2019牛客暑期多校训练营(第五场)C generator 2 (BSGS)

2019牛客暑期多校训练营(第五场)C generator 2思路x0=x0x_0 = x_0x0​=x0​x1=a∗x0∗bx_1 = a * x_0 * bx1​=a∗x0​∗bx2=a∗x1+b=a2∗x0+a∗b+bx_2 = a * x_1 + b = a ^{2} * x_0 + a * b + bx2​=a∗x1​+b=a2∗x0​+a∗b+b容易发现后项是一个等比数列求和xn=anx0+b(1−an)1−ax_n = a ^ {n} x_0 + \frac {b (1 - a

2020-07-28 11:14:33 55

原创 BSGS及其拓展

BSGS介绍这是一个求解ax≡b(modp)a ^ {x} \equiv b \pmod pax≡b(modp),的方法。并且ppp是质数,a,pa, pa,p互质,费马小定理可知,这个式子有周期性,我们一般取m=sqrt(p)m = sqrt(p)m=sqrt(p),假设x=i∗m+j,0<=i,j<=mx = i * m + j, 0 <= i, j <= mx=i∗m+j,0<=i,j<=m,则有ai∗m+j≡b(modp)a ^ {i * m + j} \

2020-07-27 22:38:40 44

原创 中国剩余定理及其拓展

中国剩余定理实质就是解nnn次互质的方程,然后分别乘以他们的取模剩余量,然后相加得到答案,这里就不展开叙述。typedef long long ll;const int N = 1e3 + 10;int a[N], b[N], n;void exgcd(ll a, ll b, ll &x, ll &y) { if(!b) { x = 1; y = 0; return ; } exgcd(b, a % b, x, y); ll temp = x; x = y;

2020-07-27 22:27:07 41

原创 [CQOI2007]涂色PAINT

[CQOI2007]涂色PAINT思路显然我们可以考虑用dpdpdp来求解问题,碰到那种一眼没思路的题稳是dpdpdp没跑了,那么我们就往dpdpdp方面去考虑吧。我们定义dp[i][j]dp[i][j]dp[i][j],表示把[i,j][i, j][i,j]这个区间涂上颜色要用多少步,显然有dp[i][j]=1,i==jdp[i][j] = 1, i == jdp[i][j]=1,i==j,接下来我们考虑如何使这个状态进行转移,当有两个邻近的颜色使一样的时候,我们可以把它们当成一种颜色一起涂色,所

2020-07-27 22:09:03 33

原创 2020杭电多校(二) New Equipments(最小费用最大流)

New Equipments思路数据已经有提示了b∗b<=4∗a∗cb * b <= 4 * a * cb∗b<=4∗a∗c,这意味着,每一个a,b,ca, b, ca,b,c构成的二元一次方程只与xxx坐标最多相交一次,所以我们对每一个a∗i∗i+b∗i+c=ya * i * i + b * i + c = ya∗i∗i+b∗i+c=y,在xxx坐标上对应的iii,只有唯一最值,因此我们只要对每一个方程,在它的对称轴两侧选点即可。问题是如何来维护这个最大值呢,显然的每一个方程只能对

2020-07-27 11:12:20 52

原创 各种逆元推导

逆元求解一(费马小定理)ppp是一个质数,并且a%p≠0a \% p \not= 0a%p​=0,则有ap−1≡1(modp)a ^ {p - 1} \equiv 1 \pmod pap−1≡1(modp),ap−2≡a−1a ^ {p - 2} \equiv a ^ {-1}ap−2≡a−1,即可得到逆元。int quic_pow(int a, int n, int mod) { int ans = 1; while(n) { if(n & 1) ans

2020-07-26 21:46:33 67

原创 B Graph(异或最小生成树)

Graph思路图是联通的,并且加边的时候要保证环一定是异或值为0,所以我们可以保证从一个点到另一个点的路径异或值是不变的,这个时候就简单了,不就是一个异或最小生成树了嘛。我们只要预处理一下,任选一个点作为根节点去得到从这个点到其他点的路径异或值,然后再做一遍异或最小生成树即可。代码/* Author : lifehappy*/#pragma GCC optimize(2)#pragma GCC optimize(3)#include <bits/stdc++.h>#d

2020-07-26 20:17:28 139

原创 G. Xor-MST(异或最小生成树)

G. Xor-MST思路异或最小生成树,这里采用了一种分治的方法来贪心求解最值:首先我们对所有的点权值从小到大排个序,从高位开始在中间找到一个这个位置上的0,10,10,1分界点分成两个集合,然后再通过递归的去求解两个集合。在递归的时候,对两个分开的集合,我们通过trietrietrie树去贪心的在两个集合连上一条边,把这条边加入我们的答案。为什么这样是对的:显然我们分成两个集合我们可以抵消掉高位的一大堆一样的东西,这个时候,我们可以保证我们的贪心策略是正确的。为什么我们要合并两个集合:假设

2020-07-26 19:59:07 72

原创 HDU 4417 Super Mario(莫队 + 树状数组 + 离散化)

Super Mario思路区间查找问题,容易想到离线莫队,确实这题就是莫队,接下来我们考虑如何维护区间高度值问题。既然是离线嘛,我们容易想到离散化和他挂钩,想想这题是否需要离散化,高度的最大值是100000000100000000100000000,但是我们的数据最大值只有100000100000100000,由此我们可以考虑离散化之后用树状数组来维护区间的高度值,再通过树状数组的前缀和查询来得到我们需要的[1,h][1,h][1,h]的答案,由此一个完美的算法(莫队 + 离散化 + 树状数组)就呈现

2020-07-25 09:18:29 40

原创 拓展欧几里德算法模板

ll ex_gcd(ll a, ll b, ll & x, ll & y) { if(!b) { x = 1, y = 0; return a; } ll gcd = ex_gcd(b, a % b, x, y); ll temp = x; x = y; y = temp - a / b * y; return gcd;}int main() { // freopen("in.txt", "

2020-07-24 17:57:37 37

原创 乌龟棋(dp)

乌龟棋思路最优值问题,显然可以通过dpdpdp解决,我们定义dp[i][j][k][l]dp[i][j][k][l]dp[i][j][k][l]表示到达1+i∗2∗j+3∗k+4∗l1 + i * 2 * j + 3 * k + 4 * l1+i∗2∗j+3∗k+4∗l这个点之前已经走过的价值最大的值(i,j,k,li, j, k, li,j,k,l分别是走一步,走两步,走三步,走四步的数量),显然这个点我们可以从dp[i−1][j][k][l]dp[i - 1][j][k][l]dp[i−1][j][

2020-07-24 17:37:49 44

原创 poj 2191 Mersenne Composite Numbers

思路用pollard_rho + miller_rabin来拆分数字,如果得到的质因子大于等于2的话就按照格式输出,否则就不是我们想要的梅森素数。代码/* Author : lifehappy*/// #pragma GCC optimize(2)// #pragma GCC optimize(3)// #include <bits/stdc++.h>#include <iostream>#include <algorithm>#include &

2020-07-24 16:33:45 31

原创 pollard_rho 模板

ll gcd(ll a, ll b) { return b ? gcd(b, a % b) : a;}ll quick_mult(ll a, ll b, ll mod) { ll ans = 0; while(b) { if(b & 1) ans = (ans + a) % mod; a = (a + a) % mod; b >>= 1; } return ans;}ll quick_po

2020-07-24 16:05:48 30

原创 poj 3233 Matrix Power Series

Matrix Power Series思路题意比较简单,就是要求S(n)=∑i=1nAiS(n) = \sum _{i = 1} ^{n} A^ {i}S(n)=∑i=1n​Ai,显然有S(n)=S(n−1)∗A+AS(n) = S(n - 1) * A + AS(n)=S(n−1)∗A+A,看到这里,那就简单了,递推式,加矩阵,矩阵快速幂无疑了嘛,所以我们开始构造矩阵。显然有如下矩阵,EEE是单位矩阵,AAA是输入矩阵,OOO是零矩阵。[EEOA]∗[OOAO]\begin{bmatrix} E

2020-07-24 10:38:56 41

原创 小A的柱状图

小A的柱状图思路经典的单调栈题目,对于每一个位置,我们维护他以当前高度可以到达的最左方,以及他当前高度可以到达的最有方,显然就有以他的高度的矩形块的面积就出来了,所以我们只需要统计n个矩形的最大值就行。具体细节操作看代码注释。代码/* Author : lifehappy*/#pragma GCC optimize(2)#pragma GCC optimize(3)#include <bits/stdc++.h>#define mp make_pair#define p

2020-07-23 20:26:58 27

原创 acwing199.余数之和(除法分块)

思路要计算∑i=1nk(modi)\sum _{i = 1} ^ {n}k\pmod {i}∑i=1n​k(modi),可化简原式=n∗k−∑i=1nk/i∗i原式 = n * k - \sum _{i = 1} ^ {n} k / i * i原式=n∗k−∑i=1n​k/i∗i,显然k/ik / ik/i是一个具有块状性质的区间,我们给定了这个块状区间的lll,就可以得到r=k/(k/l)r = k / (k / l)r=k/(k/l),由此我们开始确定这一长串块状区间的lll,显然有firstl=1.

2020-07-23 10:36:35 33

原创 miller_rabin 模板

miller_rabin 模板ll quick_mult(ll a, ll b, ll mod) { ll ans = 0; while(b) { if(b & 1) ans = (ans + a) % mod; a = (a + a) % mod; b >>= 1; } return ans;}ll quick_pow(ll a, ll n, ll mod) { ll ans = 1;

2020-07-22 18:39:56 26

提示
确定要删除当前文章?
取消 删除