自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 收藏
  • 关注

原创 小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 214

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

欧拉函数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 728

原创 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 279

原创 Xor Path

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

2020-07-29 16:46:02 276

原创 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 301

原创 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 286

原创 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 304 1

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

中国剩余定理实质就是解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 291 1

原创 [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 425

原创 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 307

原创 各种逆元推导

逆元求解一(费马小定理)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 397 1

原创 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 592

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

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

2020-07-26 19:59:07 994

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

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

2020-07-25 09:18:29 255

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

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 253

原创 乌龟棋(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 251

原创 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 269

原创 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 327

原创 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 284

原创 小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 272

原创 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 302

原创 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 342

原创 miller_rabin 证明与实现

143. 质数判定__模板题链接前置知识费马小定理:ppp是质数,则对于任意的aaa,aaa与ppp互质,则有ap−1≡1(modp)a ^ {p - 1} \equiv 1 \pmod {p}ap−1≡1(modp)。二次探测定理:如果ppp是一个质数,x2≡1(modp)x ^ 2 \equiv 1 \pmod px2≡1(modp),则有解为x1=1,x2=p−1x_1 = 1, x_2 = p - 1x1​=1,x2​=p−1,推理如下⇒x2−1≡0(modp)\Rightarrow x

2020-07-22 18:39:21 470 2

原创 欧拉筛模板

欧拉筛模板const int N = 1e5 + 10;vector<int> prime;bool st[N];void init() { st[0] = st[1] = 1; for(int i = 2; i < N; i++) { for(int j = 0; j < prime.size() && i * prime[j] < N; j++) { st[i * prime[j]] = 1

2020-07-22 18:08:17 298

原创 牛客小白月赛11:Rinne Loves Data Structure

Rinne Loves Data Structure思路我们插入的位置大概分了四种:第一种[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SFLRUFDh-1595317787698)(https://uploadfiles.nowcoder.com/images/20200721/581797790_1595316474417_7BDF5DE0CA110734D601E27F3F965A8E “图片标题”)]显然我们找到比当前插入的值的pre,也就是比当前节点大的最

2020-07-21 15:50:23 344

原创 数列分块入门 (1 ~ 7)

分块6277. 数列分块入门 1分块思想我们把每m个元素分成一块,所以我们总共的块数就是n/mn / mn/m块,一般情况下我们取m=nm = \sqrt{n}m=n​.对于区间加操作,我们可以先暴力左右两边,然后对于中间的整块的部分的加减,我们累加在块的标记上,然后我们每次查询的时候只要,每个元素的值加上这个块的标记值,就可以得到我们的答案了。复杂度分析每次操作我们修改的最多的元素最多就是O(n)O(\sqrt {n})O(n​)级别的个数,时间复杂读也就是O(n)O(\sqrt n)O(n​)

2020-07-20 18:55:20 390

原创 HDU 6071 Lazy Running(同余最短路的应用)

Lazy Running思路还是利用同余的思想,假设存在一条长度为kkk的路,那么也一定存在一条k+basek + basek+base的路base=2∗min(d1,d2)base = 2 * min(d1, d2)base=2∗min(d1,d2)。dis[i][j]=xdis[i][j] = xdis[i][j]=x表示的是,从2−>i2 -> i2−>i点x≡j(modbase)x \equiv j \pmod {base}x≡j(modbase)的满足条件的最小的xxx,所

2020-07-20 10:07:54 278

原创 P2662 牛场围栏(同余最短路)

P2662 牛场围栏思路假设我们已经知道同余最短路是什么了,这里就不再过多赘述。我们要尽可能地得到更多地课建成地边,那么我们必然要选一个basebasebase相对小的,因此我们可以对所有的棍子排个序,然后取a[1]−ma[1] - ma[1]−m作为我们选取的basebasebase。接下来就是考虑建边了,参考这篇博客,我们对所有的可能的边都建立一条与basebasebase同余的边,即for(int i = 1; i < n; i++) for(int j = 0; j <

2020-07-19 17:42:33 407 1

原创 同余最短路(P3403 跳楼机)

同余最短路前置给定m个数,这m个数可以重复取,问最大的这m个数不能拼成的数,或者给定一定范围,范围里有多少个数是这m个数可以拼成的,对于这种问题我们可以考虑同余最短路的算法。P3403 跳楼机同余最短路介绍首先我们要选择一个basebasebase作为基底,之后所有的距离就可以描述成a∗base+ba * base + ba∗base+b。在这题中我们选定xxx作为base。dis[i]=valuedis[i] = valuedis[i]=value有如下含义:value≡i(modx)val

2020-07-19 14:54:25 356

原创 C 简单瞎搞题(牛客练习赛22)(bitset优化dp)

Bitset优化Dp题目链接一般DP做法显然后面的数是与前面的数字相关的,所以我们有dp数组,dp[i][j]dp[i][j]dp[i][j]选取了jjj个数,iii是否可以被创造出来,如果可以其值为1,否则为0。所以我们显然有如下的状态转移方程:n = read(); dp[0][0] = 1;//初始化,一开始dp[0][0]就是是满足条件的。 for(int i = 1; i <= n; i++) { l = read(), r = read(); for(in

2020-07-17 21:50:08 332

原创 线段树平方和板子

题目测试链接代码/* Author : lifehappy*/#pragma GCC optimize(2)#pragma GCC optimize(3)#include <bits/stdc++.h>#define mp make_pair#define pb push_back#define endl '\n'#define mid (l + r >> 1)#define lson rt << 1, l, mid#define rson r

2020-07-17 21:13:26 438

原创 Bitset瞎搞

Bitset字符匹配Regular Number/* Author : lifehappy*/#pragma GCC optimize(2)#pragma GCC optimize(3)#include <bits/stdc++.h>#define mp make_pair#define pb push_back#define endl '\n'using namespace std;typedef long long ll;typedef unsigned lo

2020-07-17 16:08:18 253 1

原创 [SCOI2008]着色方案(DP)

题目链接思想显然我们后面的决策是跟前一步相关的,因此我们可以考虑DP,可以用一个15维的数组来进行转移,但是这样显然回mle,所以我们考虑如何压缩状态,由于1<=Ci<=51 <= C_i <= 51<=Ci​<=5,所以我们可以有dp数组:dp[a1][a2][a3][a4][a5][last]dp[a_1][a_2][a_3][a_4][a_5][last]dp[a1​][a2​][a3​][a4​][a5​][last],a1a_1a1​表示可以涂1块木块的有

2020-07-17 13:28:50 265

原创 莫队——三种题型

普通莫队P3901 数列找不同Thinking一定是用可以用莫队来写题,这点是不用质疑的,所以那就简单了,只需要判断每次询问的区间是否满足r−l+1==numr - l + 1 == numr−l+1==num就行了。Coding1Coding_1Coding1​莫队写法#include <bits/stdc++.h>#define mp make_pair#define pb push_backusing namespace std;typedef long long

2020-07-09 20:30:08 277

原创 D. Salary Changing(二分,前缀和,贪心,瞎搞)

Salary ChangingThinking这道题第一思路就是二分,模拟了一下样例,感觉好像行于是就开始写。对于二分,我们一定是二分中位数是什么,二分的边界对我们来说是非常重要的,所以我们在二分前有必要确认我们的二分边界,因为一定有∑i=1nli<=s\sum _{i = 1} ^ {n} l_i <= s∑i=1n​li​<=s,所以我们对lll数组sortsortsort一遍,得到left=lmidleft = l_{mid}left=lmid​,同样的,对rrr数组sorts

2020-07-03 17:40:11 302

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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