
数论&组合数学
文章平均质量分 79
隔板法、插空法、方程解数、生成函数……
hans774882968
这个作者很懒,什么都没留下…
展开
-
【算法】某赛车游戏中的组合计数问题及其扩展。推导思路:层层合并
本文通过代码发现了一个组合数学公式,并证明了它。在某款赛车游戏中有组队竞速赛。共有`n`个人,`n`为偶数,分为人数相等的红队和蓝队进行比赛。结果按排名得分的数组为`pts`,单调递减且均为正整数。比如`pts = [10, 8, 6, 5, 4, 3, 2, 1]`表示第1~8名分别为所在队伍获得10、8、6、…、1分。总分高的队获胜,如果总分一样,则获得第一名的队获胜。对以下情况,分别求红队获胜的情况数。1. 所有人都能完成。2. 可能有人未完成(显然第一名完成了),未完成的都获得0分。原创 2024-06-16 17:43:34 · 1191 阅读 · 1 评论 -
【数学分析】存在覆盖有理数但不能覆盖实数的区间之并——两道相关证明题
共同点:对有理数集进行划分,然后为每个子集分配合适的下标。原创 2023-01-02 01:52:40 · 625 阅读 · 0 评论 -
第45届ICPC沈阳站部分题解(D、F、G、H、I、J、K)
本文优快云本文juejin作者:hans774882968以及hans774882968题意:直接看题干,易懂。去年比赛的时候觉得这是个规律题,发现可以用小的答案生成大的答案,写了2小时以上,200多行代码,却wa了。因此不想再尝试这种令人伤悲的做法。dfs做法:首先,统计区间内1的个数,很容易联想到前缀和。因为只要求和奇偶性不同,所以前缀和可以改成前缀异或,。设前缀异或数组有个0(则有个1),试求下标对个数表达式。只考虑枚举左或右端点很难得到式子,因此考虑一个点既可以当左也可以当右。对于,只能作....原创 2022-06-16 18:23:19 · 2324 阅读 · 0 评论 -
Educational Codeforces Round 107 (Rated for Div. 2,CF1511)A~E题解
优快云传送门juejin传送门作者:hans774882968以及hans774882968题意:有三种类型的客人,他们依次到来,一种反对者,一种支持者,还有一种观望者,即根据当前情况,如果反对数 > 支持数,就投反对,反之投支持的人。现在你有两台服务器,你可以选择给当前来到的客人展示其中一台服务器,问你最多可以获得多少票支持。有两台服务器,所以把所有dislike都集中到一台服务器即可(提纯是吧🤬)。B题意:给三个数,让你找到两个数和,使得,,这三个数的位数分别是,,。最简单的方法是,令和都有个0.原创 2022-06-13 02:34:46 · 206 阅读 · 0 评论 -
SCUACM22暑假集训前劝退赛部分题解
作者:hans774882968以及hans774882968本文juejin传送门简单几何题,用三角函数知识很容易推(对于考上SCU的同学)。B一看就是博弈dp。先打个表发现每一行至多一个false,但没有发现其他规律。因此有一种做法是跑上面那段被注释的代码,把每一行的false的点(可能不存在)给找出来。但是要等很久,算了。正解是:既然为false的点不超过5000,那么就直接用刷表法。根据博弈dp常识,值为true的点推不出任何点,值为false的点可以推出一系列值为true的点。根据调和级数,原创 2022-06-06 00:23:44 · 171 阅读 · 0 评论 -
浙江工业大学之江学院程序设计期末全题解(dp、组合数学
传送门比四川大学c语言期末难多了,所以四川大学 <<<<<< 之江学院很多是牛客跨年场的原题,难度也不大。这套题除了G,我都是在火车上用手机写的,所以用的python。A因为跨年时间已经过了,所以是签到。后来才知道是牛客跨年场的题,具体应该去看看乱搞做法。B既然q数列对应配平且最简的化学方程式,那么n是偶数且i = n/2。于是答案就显而易见了。ra = lambda: list(map(int,input().split()))T = int(input原创 2022-01-07 00:10:33 · 891 阅读 · 0 评论 -
【简单算法】2021SCUACM集训队冬季选拔2全题解
传送门本来在预习课程期末的,结果还是没能忍住来写了一套题。20230416更新:终于把之前没写的题都补上了~作者:hans774882968以及hans774882968以及hans774882968签到。数有多少个个位为9的。B-多重背包看到就猜到大约是的算法,所以显然要先取模+开桶计数。把模m的和看成重量,于是转化为多重背包求是否存在方案的问题。但麻烦的是,不能直接用,因为它受到的影响,必然为true;并且也无法直接算方案数。那么我们就在dp转移的过程中监听即可。不难的一个背包居然tag是1900原创 2021-12-26 18:31:21 · 925 阅读 · 0 评论 -
高斯整数环学习心得随笔及其实现
高斯整数环学习心得随笔过些天补上~代码==:两个高斯整数相伴,即为相等。小于和大于:用复数的范数Norm来比较。应用场景举例:高斯整数环的唯一分解定理证明。整除和取模(带余除法):复数除法的结果是个有理数,但为了方便还是直接用double存了。设两个高斯整数a,b,复数除法结果为a / b = x+yi,则一种可行的取法是round(x)+round(y)*i,这就是整除结果。而g = (x-round(x))+(y-round(y))*i就是带余除法定义中一个可行的“范数小于等于1/2的复数”原创 2021-12-24 15:21:30 · 1214 阅读 · 0 评论 -
【组合数学】经典方程的对偶方程、一个不等式问题(例题:acwing1312 序列统计)
经典方程的对偶方程方程,指经典方程sum(x[j]) = n, 1 <= j <= m, x[j] >= 0。它的解的个数很容易求,设有n个球和m-1个隔板,则隔板间的空隙有m个且允许为空,故解数C(n+m-1,n)。它的对偶问题是什么呢?设以上经典方程为(m,n),并设对偶问题为(p,q),则:p+q-1 = n+m-1q = m-1(注意,不可能是q = n)于是解得(n+1,m-1)。这意味着sum(x[j]) = m-1, 1 <= j <= n+1, x[j原创 2021-12-09 00:55:20 · 832 阅读 · 0 评论 -
lc1819——枚举因数并判定,两种解法
https://leetcode-cn.com/problems/number-of-different-subsequences-gcds/solution/mei-ju-yin-shu-bing-pan-ding-liang-chong-fj6e/法一力扣上大多数题解都是法一。因为值域是2e5,又是和公约数有关,所以肯定会考虑枚举因数。这里就考虑枚举i,并判定是否存在一个子序列的gcd是i。开桶c[]记录每个数出现次数,枚举i的所有倍数j*i,则sum(c[j*i])就找到了数组里i的倍数构成的集原创 2021-12-06 01:23:42 · 437 阅读 · 0 评论 -
2021SCUACM FallTraining 05 数学 J——中规中矩的莫比乌斯反演
传送门看到一大串式子里面出现了gcd,可以猜测是要设gcd为d,并搞出gcd(...) == 1的形式,然后莫比乌斯反演了。题目中f函数的定义实际上就是莫比乌斯函数的平方。ans=∑d=1nμ2[d]∗d∗(∑a[1]=1n...∑a[x]=1n∏j=1x(a[j])k[d==gcd(a[1],...,a[x])])ans = \sum_{d=1}^n \mu^2[d]*d * (\sum_{a[1]=1}^n...\sum_{a[x]=1}^n \prod_{j=1}^x (a[j])^k [d =原创 2021-10-30 02:49:16 · 164 阅读 · 0 评论 -
ICPC南京18J——考虑素数贡献
是少数题意特别容易看懂的ICPC题,题意略。传送门直接考虑区间是不得行的,唯一跳脱出区间思路的方法,是利用数值(数论题的普遍特征)。这里问不同素因子的个数,自然要考虑素因子贡献了。所以原问题转化为:每个素因子p的贡献为包含它的区间个数,包含定义为区间中存在一个数是p的倍数,求贡献和。这个转化还不够,仍然不能做。但我们发现,枚举数组里每个数的所有素因子,这在时间复杂度上是可行的,也是很常见的技巧。所以我们不妨在枚举a[i]的素因子p的时候,更新p的贡献。于是此时我们面临一个问题:设有i[1],...i[原创 2021-10-04 17:27:17 · 123 阅读 · 0 评论 -
PTA-L3-023-计算图,以及我对计算图的一些想法
传送门定义dp1[u]表示u号可达的所有点构成的函数的函数值;dp2[u]表示u号可达的所有点构成的函数对varIdx这个点所表示的变量的偏导数值,其中varIdx是在dp2求解过程的外部逐一枚举,并输入的。因为我们建的是反向图,所以所求函数值就是dp1[st],st表示图中唯一的入度为0的点(拓扑序最小的点),偏导值是dp2[st]。题干说计算函数值是一个从左到右的过程,但因为我是用记忆化搜索实现的,所以我认为函数值和偏导值都从右到左(即建立反向图)来计算更为方便。既然是DAG上dp,那么这题也是原创 2021-09-14 16:32:56 · 440 阅读 · 0 评论 -
LeetCode611-转化为桶+集合划分思想+生成函数
考虑求出res[i]表示a[x]+a[y]=i,x!=y的下标对(x,y)个数。对res做前缀和,则得a[x]+a[y]<=i,x!=y的下标对(x,y)个数,记为ress。设b[x]表示a数组里等于x的元素个数(即开桶思想)。则ress[i]*b[i]表示最大值等于i且不能构成三角形的三元组个数,显然这是不合法的三元组集合的一个划分。则ans=Cn3−∑1<=i<=mress[i]∗b[i]ans=C_n^3-\sum_{1<=i<=m}ress[i]*b[i]ans=原创 2021-08-12 17:20:07 · 127 阅读 · 0 评论 -
指数型生成函数(二):贝尔数、无向连通图计数、弱连通DAG计数
贝尔数:n个元素的集合的划分的个数注意到S2的定义就是n个元素放入k个无区别的盒子的个数,“集合”是一种无区别的盒子,所以贝尔数等于一行S2的和。定义dp[n]为所求,则考虑1号元素所在集合的元素个数:dp[n]=∑i=1ndp[n−i]∗Cn−1i−1=∑i=0n−1dp[n−1−i]∗Cn−1i,dp[0]=1dp[n]=\sum_{i=1}^ndp[n-i]*C_{n-1}^{i-1}=\sum_{i=0}^{n-1}dp[n-1-i]*C_{n-1}^i,dp[0]=1dp[n]=i=.原创 2021-08-09 16:57:42 · 591 阅读 · 0 评论 -
指数型生成函数的范例——状压dp、矩阵快速幂优化及对指数型生成函数的理解
从《组合数学》中的经典例题开始。在n个排成一排的瓷砖上染色,有4种颜色,有2种要求出现次数为2的倍数,其他的无要求。求方案数,模998244353。组合计数问题先看能否dp。显然可以考虑“前缀定义dp”,于是我们还要考虑当前这个颜色对每种有要求的颜色的奇偶性的影响。那么定义dp[i][S]为涂了前i个瓷砖,两种颜色出现次数各自模2的状态位为S的答案。则答案为dp[n][0]。转移分2种情况:当前涂了无要求的颜色,贡献为dp[i-1][S]当前涂了有要求的颜色,设是第j种有要求的颜色,j=0~1原创 2021-08-06 22:23:07 · 595 阅读 · 4 评论 -
hdu4746-莫比乌斯反演+交换求和顺序+预处理
https://vjudge.net/contest/386727#problem/D如果你在csdn上查本题的其他题解,你会很恼火,因为你不知道他们的F函数是怎么来的。我这篇题解将会把F函数的来历,这个唯一的关键点讲清楚!不妨设n<=m。做这一假设是因为gcd值的范围为1~n。考虑到只有gcd(i,j)==val这种形式的式子才能用莫比乌斯反演处理,我们不妨就加多一层求和符号,并增加限制。ans=∑1<=x<=n[pf[x]<=k]∑1<=i<=n∑1<=原创 2021-05-30 16:44:55 · 344 阅读 · 0 评论 -
poj3904-Sky Code-一起揭露莫比乌斯反演和容斥的一致性
莫比乌斯反演https://vjudge.net/contest/441421#problem/A原问题可以表示为根据莫比乌斯反演公式我们把d移到式子外层,得到其中于是设数组里是d的倍数的数共x[d](这表示x是关于d的函数)个。开桶记录每个数的个数,则求x[d]的复杂度是O(lim/d),于是整个做法的复杂度是nlogn。容斥考虑正难则反,原问题可写为这个问题依旧没法处理,不妨考虑把gcd转化为倍数关系。我们设集合S[d]为每个数都是d的倍数原创 2021-05-29 23:44:19 · 769 阅读 · 2 评论