自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

辣椒油的博客

人间有味是清欢

  • 博客(27)
  • 收藏
  • 关注

原创 haskell入门教程[持续更新]

本文是haskell入门教程,旨在向读者介绍新型函数式编程语言——haskell。

2022-07-04 18:39:05 6012 2

原创 [模板] 高斯消元

[模板] 高斯消元由于acwing的模板只针对n⋅nn\cdot nn⋅n的方程有唯一解有效果,这里贴出来对于任意矩阵的模板,以及枚举自由元的方法。∑i=1n\sum_{i=1}^{n}i=1∑n​

2021-09-26 12:37:11 138

原创 [模板] 高精度组合数

[模板] 高精度组合数#include<bits/stdc++.h>#define ll long long#define pii pair<int,int>using namespace std;const int maxn = 1e6 + 10;/*思路:先写高精度乘、getp、get、qpow,然后写C对于C,统计<= 分子的所有素数的幂次,然后快速幂累乘入ans中。*/struct bign{ int cnt, num[1010];

2021-09-11 12:51:09 269

原创 [算法]数位dp与状压dp

[算法] 数位dp与状压dp这几天刷了十几道数位dp,除了个别题以外,感觉都挺板的。状压dp中也有两种固定的题型出现了很多次。1.数位dp模板vector<int> num;ll dfs(int pos, int st, int limit, int lead){ if(!pos) return 1;//这里是递归边界,可能要改 //这里可以加剪枝 if(!limit && !lead && dp[pos][st] !=

2021-08-10 10:34:49 389

原创 [题解] Double Strings

[题解] Double Strings 动态规划+组合数学题目链接题意大概就是:有两个字符串A,BA,BA,B,要从中选出两个长度相同的子序列,满足:这两个子序列前面k(k>=1)k(k>=1)k(k>=1)个字符相同,并且第k+1k+1k+1个字符满足ak+1<bk+1a_{k+1}<b_{k+1}ak+1​<bk+1​,后面的字符任意,求所有这样的子序列个数。首先对于前面kkk个字符相同,可以用dp[i][j]dp[i][j]dp[i][j]表示AAA的前

2021-08-01 14:58:58 169

原创 [算法]博弈论

[算法]博弈论一、有向图游戏所谓有向图游戏,就是在一个有向无环图中,只有一个起点,上面有一个棋子,两个玩家轮流沿着有向边推动棋子,不能走的玩家判负。可以看出,这个游戏必须会终止。定义必败状态为先手必败状态,必胜状态为先手必胜状态。我们可以得到下面三条定理:定理一:没有候机状态的状态必是必败状态。定理二:必胜状态必有某个后继状态为必败状态。定理三:必败状态的后继状态如果有,那么必然全是必胜状态。二、SG函数定义mexmexmex函数为不属于集合SSS中的最小非负整数。例如mex({0,2,

2021-06-20 11:25:30 223 2

原创 [题解] HDU 5528 Count a*b

[题解] HDU 5528 Count a*b 简单容斥+莫比乌斯反演题意:令f(m)f(m)f(m)表示有多少个整数有序二元组(a,b)(a,b)(a,b)满足0≤a,b<m0\le a,b<m0≤a,b<m,且m∤abm\nmid abm∤ab。输入nnn,求g(n)=∑m∣nf(m)(mod264)g(n)=\sum_{m|n}f(m) ( mod2^{64})g(n)=∑m∣n​f(m)(mod264) (也就是用unsigned long longuns

2021-06-06 17:48:18 87

原创 [题解] 可重排列

[题解] 可重排列 组合数学现在有 a1a_1a1​个111,a2a_2a2​ 个222, …\dots…,a9a_9a9​个999,求使用其中所有的数字构成的不重复的数字的和是多少。答案对109+710^9+7109+7取模。我们可以先考虑个位取111时,这个111产生的贡献。设n=∑i=19ain=\sum_{i=1}^{9}a_in=i=1∑9​ai​则这个111在个位出现的次数为(n−1)!(a1−1)!a2!a3!…a9! \dfrac{(n-1)!}{(a_1-1)!a_2!a_3!\

2021-06-06 16:48:25 297 2

原创 [题解]SP7001 Visible Lattice Points

[题解]SP7001 Visible Lattice Points 莫比乌斯反演+数论分块题目链接一个点可看见就是它和原点连线没有其他点存在。我们把所有的有序三元组(x,y,z)(x,y,z)(x,y,z)找出来,发现其中gcd(x,y,z)gcd(x,y,z)gcd(x,y,z)相等的有多个,然而只能取一个。设f(n)f(n)f(n)为gcd⁡(x,y,z)=n\gcd(x,y,z)=ngcd(x,y,z)=n的有序三元组个数,g(n)g(n)g(n)为gcd⁡(x,y,z)=n的倍数\gcd(

2021-06-05 18:20:01 92

原创 [题解] SP4191 Sky Code

[题解] SP4191 Sky Code 莫比乌斯反演题目链接这是我做的最水的一道莫比乌斯板题。。。不过这题是我第一次真正用到莫比乌斯反演,之前都是用的莫比乌斯函数的性质。。。我们这里直接定义f(n)f(n)f(n)为a1a_1a1​到ana_nan​中,gcd⁡(a,b,c,d)=n\gcd(a,b,c,d)=ngcd(a,b,c,d)=n的无序四元组个数,g(n)g(n)g(n)为a1a_1a1​到ana_nan​中,gcd⁡(a,b,c,d)=n的倍数\gcd(a,b,c,d)=n的倍数gcd(

2021-06-05 16:31:50 111 1

原创 [数学] 一些神奇的结论

[数学] 一些神奇的结论1.(a+b)p≡ap+bp (mod p)(a+b)^p\equiv a^p+b^p\ (mod \ p)(a+b)p≡ap+bp (mod p)我们首先需要知道一个结论:Cpk≡0(mod p),∀k∈[1,p−1]C_{p}^{k}\equiv0(mod\ p),\forall k\in [1,p-1]Cpk​≡0(mod p),∀k∈[1,p−1]这是因为,由于ppp和1→p−11\to p-11→p−1互

2021-05-27 21:30:20 114

原创 [题解] CF 1528C

[题解] CF 1528C 欧拉序+stl+贪心这是我第一次做cf div2的E题(而且还是我最不擅长的图论),内心非常激动!题目链接这里需要解释一下什么是团(clique):团是图的一个子图,并且这个子图任意两个点都有一条直接边相连。我们很容易发现,这个最大团所包含的节点,一定在第一个树的同一条树链上。那么,我们要如何快速判断在树1的点是否在树2有子孙关系呢?答案是欧拉序。首先你要知道dfs序长什么样。图片来自大佬Styx-ferryman的博客。那么欧拉序长什么样呢?图片来

2021-05-26 21:37:27 133

原创 一些关于二进制位运算的奇特性质(持续跟新)

一些关于位运算的奇特性质(持续跟新)一、异或 ⨁\bigoplus⨁异或,又称不进位加法,或者不借位减法。性质:1.1.1.满足交换律和结合律2.2.2. a⨁a=0a\bigoplus a =0a⨁a=0,a⨁0=aa\bigoplus 0=aa⨁0=a.3.3.3. if a⨁b=cif \ a\bigoplus b = cif a⨁b=c,then a=b⨁cthen \ a = b\bigoplus cthen a=b⨁c.2、 3合起来使得⊕

2021-05-26 17:47:51 382

原创 [题解] CF 1528B Kavi on Pairing Duty

[题解] CF 1528B Kavi on Pairing Duty 动态规划+简单数论题目链接这是题目给出的部分样例。让我们仔细看第222个和第777个。好像第777个内层和第222个完全一样?这让我们反应过来,好像可以dpdpdp。我们经过进一步的推理可以发现:设第111个点和第xxx个点相连,那么对于有端点在[x+1,2n][x+1,2n][x+1,2n]的线段,我们发现,如果这个线段的左端点在[1,x][1,x][1,x]之内,那么这两个线段必相交,故长度一定相等;如果这个线段的左

2021-05-25 17:07:26 429

原创 [题解] 约数个数和

[题解] 约数个数和 数论分块+莫比乌斯反演题目链接首先我们需要知道一个结论:d(ij)=∑x∣i∑y∣j[gcd⁡(x,y)==1]d(ij) = \sum_{x|i}\sum_{y|j}\left[\gcd(x,y)==1\right]d(ij)=x∣i∑​y∣j∑​[gcd(x,y)==1]感性理解就是对约数取了个并集。我们对这个式子进行变形:d(ij)=∑x∣i∑y∣j[gcd⁡(x,y)==1]=∑x∣i∑y∣j∑k∣gcd⁡(x,y)μ(k)=∑k∣i,k∣jμ(k)∑x∣i∑y∣

2021-05-24 10:54:38 158

原创 [题解] Bi-shoe and Phi-shoe

[题解] Bi-shoe and Phi-shoe 欧拉函数题目链接这是到啥b题。然而我wa了5次给出一个数xxx,找到满足φ(n)≥x\varphi(n)\ge xφ(n)≥x的最小正整数nnn。注意,题目中规定了φ(1)=0\varphi(1)=0φ(1)=0。刚开始想用φ\varphiφ的反函数来存,结果wa爆了。从这件事我们可以得到一个结论:没事不要用什么反函数,还不如打暴力。结果暴力比反函数跑得还快hh不过有一点要注意的是,这里不能二分。因为如果a>ba>ba>b

2021-05-23 23:08:24 72

原创 扩展中国剩余定理

在介绍扩展中国剩余定理之前,让我们先介绍一下中国剩余定理。中国剩余定理中国剩余定理是用来求解一堆线性同余方程组的通解的算法。该算法的时间复杂度是O(方程的个数)O(方程的个数)O(方程的个数)。{x≡a1mod  m1x≡a2mod  m2x≡a3mod  m3.........x≡anmod  mn \left\{\begin{array}{rcl}x\equiv a_1 & {\mod m_1}\\x\equiv a_2 & {\mod m_2}\\x\e

2021-05-23 09:16:42 1507 5

原创 [题解] 最短路计数

[题解] 最短路计数 Dijkstra已知一个有向图,nnn个点mmm条边,现在要询问从111到nnn的最短路一共有几条。不得不说,这道题让我加深了对Dijkstra算法的理解。我们可以直接在原板子上稍作改进。刚开始的时候想到的是以拓扑序排序,但是其实对于最短路问题来说,Dijkstra算法更新的顺序就是“拓扑序”。因为我们每次先更新的点uuu的最短路d[u]d[u]d[u]都比后面更新的点vvv的最短路d[v]d[v]d[v]更小。首先,我们知道Dij算法维护的是已经确定最短路的点的集合。那么

2021-05-20 16:03:01 161

原创 [题解] 种树 反悔贪心

[题解] 种树 反悔贪心+优先队列今天学习了一个奇怪的算法:反悔贪心。我们什么都不说了,直接来康康题吧。题目:种树从n个数中至多选k个数,相邻的数不能选。现在求出选出来的最大值。当我们不考虑"相邻的数不能选"这个条件时,显然算法简单的一匹。降序排一波序,选出前k个最大的正数(如果遇到负数就停止)。那么,当我们考虑相邻时,我们就会发现,当我们选择a[i]a[i]a[i]时,我们就不能选择a[i−1]a[i-1]a[i−1]和a[i+1]a[i+1]a[i+1]了。为了不放过这种可能性,我们令a[

2021-05-17 21:38:53 202

原创 [题解]CF1525D Armchairs

[题解]CF1525D Armchairs dp有一排座位,编号1 n1~n1 n,其中不超过n2\frac{n}{2}2n​的座位被人坐上了。现在需要调整每个人的座位,每次把坐在i的人调到空位j的代价是∣i−j∣|i-j|∣i−j∣。现在需要把每个人调一次,使得原来坐了人的位置都空出来。问最小的花费是多少。刚开始想的是贪心。用a,ba,ba,b分别记录人和空位的下标,然后升序排序,最后从左到右依次遍历。可惜的是,这种算法只对nnn是偶数并且出现的人正好有n2\frac{n}{2

2021-05-17 09:59:44 441 4

原创 [题解] Antisymmetry

[题解] Antisymmetry 哈希+二分粗略题意:给你一串只包含0和1的字符串,长度n≤500000n\le500000n≤500000,求满足条件的子串个数。如果子串s[i,j]s[i,j]s[i,j]满足条件,那么这个子串长度lll是偶数,并且第一个^ 最后一个=1,第二个^倒数第二个 = 1…首先想一波暴力解法,枚举中点和长度,逐个统计,时间复杂度O(n2)O(n^2)O(n2)。然后发现对于固定的中点,它的长度是可以二分的,并且利用hash,check函数也很好写。这里主要是对于反串

2021-05-15 23:07:06 222

原创 [题解]CF 1519C Berland Regional

[题解]CF 1519C Berland Regional题意:有很多大学,每个大学有很多学生。每个大学需要组队,组队长度为k,如果人数小于k就无法组队。总的贡献为所有组队选手的能力值之和。现在要统计每个k的总贡献。这道题唯一涉及到的算法就是一个前缀和优化而已。。。真正优化的点,在于改变枚举的对象与stl的使用。对于每个大学,我们按升序排序,然后计算出其前缀和,那么对于kkk,此大学产生的贡献为sum[⌊num[i]k⌋∗k]sum\left[\left \lfloor \frac{num[i]}{

2021-05-14 19:56:21 136 2

原创 积性函数常用结论(持续更新)

积性函数常用结论(持续更新)一、常用积性函数所谓积性函数,就是指当gcd(a,b)=1gcd(a,b)=1gcd(a,b)=1时,f(ab)=f(a)⋅f(b)f(ab)=f(a)\cdot f(b)f(ab)=f(a)⋅f(b)。常见积性函数:元函数 ϵ(n)=[n==1]\epsilon(n) =[n==1]ϵ(n)=[n==1]恒等函数 1(n)=11(n) = 11(n)=1单位函数 id(n)=nid(n) = nid(n)=n欧拉函数 φ(n)=∏pi∣npiαi(1−1pi)\

2021-05-13 22:03:58 413

原创 [题解] GCD SUM

[题解] GCD SUM 莫比乌斯反演题意: 求∑i=1n∑j=1ngcd(i,j) \sum_{i=1}^{n} \sum_{j=1}^{n} gcd\left ( i,j \right ) i=1∑n​j=1∑n​gcd(i,j)方法一:莫比乌斯反演我们直接枚举gcdgcdgcd。∑i=1n∑j=1ngcd(i,j)=∑d=1n∑i=1n∑j=1n[gcd(i,j)==d]⋅d=∑d=1n∑i=1nd∑j=1nd[gcd(i,j)==1]⋅d=∑d=1nd∑i=1nd∑j=1nd∑k∣gcd(i

2021-05-13 19:54:48 1807 3

原创 [题解]琪露诺 单调队列优化dp

[题解]琪露诺 单调队列优化dp坑点挺多的。。。首先推出一个基本的式子:dp[i]=maxj=i−r,j>=0i−ldp[j]+a[i] dp[i] = max_{j = i-r, j >= 0}^{i-l}dp[j] + a[i] dp[i]=maxj=i−r,j>=0i−l​dp[j]+a[i]初始条件dp[0]=0dp[0]=0dp[0]=0这个式子成立的条件是,dp[j]能够到达。然后就把所有dp[i]dp[i]dp[i]赋值-inf,表示还没有到达。我们用一个单调队

2021-05-13 14:03:46 80

原创 [题解] 聪明的质监员

[题解] 聪明的质监员 二分+前缀和对于这种>=x求x的问题,显然一秒钟就能想到二分。∑j=liri[wj≥W]×∑j=liri[wj≥W]vj\sum_{j = l_i}^{r_i}\left [ w_j \ge W \right ] \times \sum_{j = l_i}^{r_i}\left [ w_j \ge W \right ]v_jj=li​∑ri​​[wj​≥W]×j=li​∑ri​​[wj​≥W]vj​对于这个诡异的式子,可以看出用前缀和优化。对于每个w,维护第一个式

2021-05-08 18:06:34 152

原创 [题解]借教室

[题解]借教室 二分+差分区间操作,自然想到差分。如果在时刻时,操作失败,那么在时刻t之后,操作也一定会失败。寻找区间端点,自然想到二分。每次check一下该时间点是否合格,时间复杂度O(nlog⁡(n+m))O\left( n \log( n+ m) \right)O(nlog(n+m)).#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include

2021-05-08 17:00:29 128

空空如也

空空如也

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

TA关注的人

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