数学
lamentropetion
---
展开
-
【离线】牛客小白月赛39 G
这里有个容易想错的点,对于 Bit 维护的 y 轴,query(x)维护的是 y 轴上 <= x 的值,也就是说,query是个 y 轴上的前缀和。然后去遍历值域,如果值域很大的话需要排序+离散化,但是这里不需要。这样就直接写就好了,注意询问需要用 vector 存,否则会出错。确定好两维:x 轴是1 ~ n, y 轴是 k 的大小。query(x)是个前缀和,它不是 y轴 上某个数的值。这种离线Bit,一般都是去考虑二维数点就能写清楚了。原创 2023-12-16 01:45:37 · 528 阅读 · 0 评论 -
【组合计数】CF1866 H
设 f[x] 为恰好有一个最大值为 x 的方案数,我们要求这个,那就设 g[x] 为 至少有一个最大值为 x 的方案数,那么答案就是 f[x] = g[x] - g[x - 1]不知道这种trick叫什么,昨天VP刚遇到过。这里也一样,不过要稍微变一下。原创 2023-10-26 23:02:47 · 452 阅读 · 0 评论 -
【欧拉函数】CF1731E
对于 k 次操作,gcd(u, v) = k + 1,代价的贡献就是二元组 (u, v)的个数 * (k + 1)这个是个很经典的欧拉函数的套路,可以用线性筛把欧拉函数求出来,然后求个前缀和 s[i] 就是。1 ~ i 的所有数中 (u, v)满足 gcd(u, v) = 1的二元组个数。容易发现,操作从k大到小的代价一定是最小的。那么就要我们求二元组个数。原创 2023-10-26 17:12:28 · 201 阅读 · 0 评论 -
【计数DP】CF1794D
所以还剩下 n - (sum - j) 个位置,也就是说,在 n - (sum - j) 个位置中选 y 个位置,那就是 C(n - (sum - j), y)问题就是出在这里,我不知道怎么求组合数,一心想着对于指数求可重集排列,但是这么多的指数的个数是很难维护的。然后就是考虑转移,这种计数类的dp在转移的时候都是考虑多一格会多出多少贡献,贡献一般由组合数求出。前缀已经选了 j 个底数,设前缀的个数和为 sum,那么前缀有 sum - j 个数作为指数。设多出来那一格的数为 x, 它的个数为 y。原创 2023-10-25 01:08:24 · 350 阅读 · 0 评论 -
【数学】ABC 319 E
首先注意到每个询问的范围是1e9,不难想到答案一定存在某个循环节,最后一定是要 %T的。那么只需要枚举起点,最多lcm(p1, p2, p3....)个,然后模拟过程就好了。猜想循环节为lcm(p1, p2, p3, ....)p1 和 p2的 T = lcm(p1, p2)p2 和 p3的 T = lcm(p2, p3)那么问题就在于找到这个循环节是什么。原创 2023-09-10 21:20:45 · 251 阅读 · 0 评论 -
【枚举子序列+组合数学+推式子】Cf Edu11 E
【代码】【组合数学+推式子】Cf Edu11 E。原创 2023-09-06 11:05:28 · 202 阅读 · 0 评论 -
【数学】CF1242 A
【代码】【数学】CF1242 A。原创 2023-08-18 16:33:47 · 141 阅读 · 0 评论 -
【枚举】CF1858 B
虽然赛时做出来了,但是这种计算还是感觉不熟练。直接枚举是去掉哪个店,然后计算贡献即可。原创 2023-08-16 18:51:56 · 98 阅读 · 0 评论 -
【枚举gcd】CF803 C
还有就是,(2 * n) / k < 1 + k) 的情况直接判无解,否则会超时。注意 gcd = 1和 gcd = n的情况要特判,不然枚举因子的时候会超时。因为要求严格递增,贪心地考虑,构造成1,2,3,....,k - 1即可。那么就是 k1 * k,k2 * k,k3 * k,....那么(k1 + k2 + k3 +....) * k = n。然后最后一项就是 n - k * (k - 1) / 2。根据惯用套路,我们去枚举 n 的因子即可。需要判断最后一项要大于k - 1。原创 2023-08-14 14:22:31 · 147 阅读 · 0 评论 -
【枚举倍数+容斥】CF803 F
很显然,设该 gcd 的个数为 sum,那么每个数都有选和不选,方案数就是 (1原创 2023-08-14 14:07:12 · 87 阅读 · 0 评论 -
【枚举+推式子】牛客小白月赛 63 E
组合数学就是在考虑枚举所有包含1和n的区间。这个典中典就是枚举1和n的位置然后算贡献。首先是个计数问题,考虑组合数学。原创 2023-08-12 19:05:14 · 408 阅读 · 0 评论 -
【数学】CF1514 C
【代码】【数学】CF1514 C。原创 2023-08-11 22:57:25 · 295 阅读 · 0 评论 -
【数学】CF1796 C
模拟一下样例可以发现一些规律。原创 2023-08-09 18:54:54 · 221 阅读 · 0 评论 -
【dfs分解质因数】CF27E
爆搜分解质因子的模板题,记录一下板子。原创 2023-08-02 15:46:31 · 109 阅读 · 0 评论 -
【连通块染色,双指针维护区间map,整除分块】CF616 CDE
很经典的双指针动态维护区间map,用set维护这个元素是否存在以及不同的种类个数,map维护每个元素的出现次数。经典的给格子染色,直接dfs染色就行,不要用并查集,虽然也能做但是不好写。然后对于每一个*,把周围的格子的颜色扔到set里去重统计就行。原创 2023-08-01 19:52:47 · 162 阅读 · 0 评论 -
【*1700质因子分解】CF1538D
给定两个数a和b,每次操作可以在两个数中选一个数然后除它的一个因子,问你是否可以进行正好K次操作之后a和b相同。然后可以发现,我们可以操作[min,max]内的任意次数(这个稍微想一下即可)那就是变成a和b的gcd的次数。可以发现,最多操作次数是(2+2+4+1)设最大次数为max,最少次数为min。因此就变成判断max<=K了。对于K=1的情况需要特判。原创 2023-07-24 20:24:53 · 49 阅读 · 0 评论 -
【树链+EXGCD】杭电多校第一场 A
给定一棵树和两条路径,每条路径都有起点和终点,起始时起点有人,每隔一秒都会往终点走一步,会从起点走向终点再会起点这样不断地周期性地走,让你求一点,使得两个人能在这点相遇且花的时间最少。首先答案一定是两条路径相交的点中的一个,因此可以把一条路径标记一下,然后对于另一条路径去check是否重合。比赛的时候只是分成四种情况讨论,并没有解方程,赛后调了很久也没有全对,但是只是几个数据没过,也根本调不出来。对于树链的操作,只需要求出LCA,分成两部分,暴力跳即可。那就这样吧,反正大部分都对了 (原创 2023-07-18 22:13:49 · 938 阅读 · 0 评论 -
【exgcd】“范式杯”2023牛客暑期多校训练营1 M
手模几次样例可以发现,最少操作次数是2*(k1+k2)或2*abs(k1-k2)exgcd把一组最小整数解(k1,k2)求出来之后,在该特解附近统计答案的最小值。设两个杯子的容量分别为A,B。原创 2023-07-18 13:19:35 · 242 阅读 · 2 评论 -
【前后缀GCD】ABC125 C
由样例可知,换成的数可以是其他N-1个数的gcd,这样对答案的贡献也没有影响。因此怎么去快速求其他N-1个数的GCD就成了问题。这样trick非常经典,在牛客寒假营就出现过。它那个是前后缀背包,这个是前后缀GCD。这道题,多看看样例大概就出来了。所以直接去枚举换的是什么数就行。原创 2023-07-13 23:37:57 · 184 阅读 · 0 评论 -
【GCD+MST】ABC210 E
初看一定是没思路的,但是模拟一下小数据,思路很快就出来了。原创 2023-07-13 00:36:53 · 102 阅读 · 0 评论 -
【*2000 暴力树形DP】CF1230 E
【代码】【*2000 暴力树形DP】CF1230 E。原创 2023-07-11 22:23:04 · 116 阅读 · 0 评论 -
【*1900倍数遍历】CF1627 D
对于这道题要注意,j/i的gcd要为1,这样才能保证j是i的最大公约数。原创 2023-07-11 17:16:38 · 74 阅读 · 0 评论 -
【枚举+exgcd】牛客练习赛33 C D
注意到减y的次数不会超过N,因此我们去枚举减y的次数,然后去计算加x的次数。首先要使平均数是整数,说明sum是N的倍数,即要使sum%N=0。问题就是经过若干次操作的最少代价,可以使sum%N=0。easy版本一般是枚举,我们去考虑枚举。如果x=1,那么加x的次数可以直接计算。=1,那么需要exgcd。那就去考虑模N意义下的sum。原创 2023-07-10 11:50:37 · 86 阅读 · 0 评论 -
【唯一分解】A因子
【代码】【唯一分解】A因子。原创 2023-07-10 00:32:54 · 186 阅读 · 0 评论 -
同余最短路
那么答案就是枚举同余类,对于每个同余类,能到达的楼层数的贡献就是(H-dis[i])/X+1。设dis[i]为在模X意义下,+Y和+Z之后%X余数为i的能凑出来的最小数。前者是从这个最小数开始+X,能到达的楼层数,+1是因为要算它本身。对于每个整数,都是由1经过*10和+1这两种操作转移过来的。最后的数位和就是+1操作的次数,*10对数位和没有贡献。设dis[i]为在模N意义下达到%N余数为i的最小代价。起点是1,因为一开始是在第一层,%X=1。因此同余类之间建两条边:*10和+1。原创 2023-07-09 16:26:53 · 378 阅读 · 0 评论 -
【枚举倍数】找一找
【代码】【枚举倍数】找一找。原创 2023-07-06 21:08:43 · 120 阅读 · 0 评论 -
【裴属定理】Wannafly挑战赛22 A
【代码】【裴属定理】Wannafly挑战赛22 A。原创 2023-07-06 19:10:02 · 123 阅读 · 0 评论 -
【推式子 二项式定理】Wannafly挑战赛 B
【代码】【推式子 二项式定理】Wannafly挑战赛 B。原创 2023-07-02 01:13:27 · 111 阅读 · 0 评论 -
【离线+筛法+MEX】阿宁的质数
但是这里有个坑,就是一个位置x可能对应着多次询问,所以如果存下来的话就会覆盖掉。我们在离线的时候总是希望把询问存下来。因此不存,直接预处理,然后输出即可。原创 2023-06-17 21:39:07 · 35 阅读 · 0 评论 -
【枚举+数学】代码源每日一题div2 数学
那么只需要分开枚举即可,然后求一下最大值*次大值 和 次大值*最大值 的 最大值。也就是说我们要枚举(N+1)*N/2的因子,其实就是找出它的最大因子。注意到还有个条件我们没有利用:数列是1~N的。那么就是(k1+k2)*K=sum。这意味着sum=(N+1)*N/2。因此只需要枚举sum的因子即可。说明不能直接枚举,怎么办呢。所以K是sum的一个因子。但是注意数据范围:1e9。原创 2023-06-15 16:52:55 · 381 阅读 · 0 评论 -
【GCD枚举因子+环上问题】代码源每日一题div1 最大公约数
这个又是典中典的东西,直接求个前缀和%x就好了,看看mp[pre[i]%x]的最大值就是最多能分成几段,然后记录答案即可。还有一个很显然的点我没有想到:如果一个序列能分成多段,那么自然可以分成更少段,因此答案数组需要求个后缀最大值。要让GCD(sum1,sum2,sum3,....sumk)最大,惯用套路,令其为K,那就是让K最大。事实上都不需要枚举,因为你一段区间和%x为0了,头尾相接%x也一定是0了。还有环的条件,我想的是倍增数组之后O(N)枚举区间,但是这样肯定T。所以很自然想到了枚举sum的因子。原创 2023-06-11 15:48:43 · 54 阅读 · 0 评论 -
一类trick【鸽巢原理】
同样的道理,可以给后缀和模2019,如果两个位置模2019的结果相同,那么中间那个数就一定是2019的倍数,所以可以直接map计数。如果两个位置的前缀和模N的结果相同,那么这两个位置之间的那个数模N就是0。给序列做个前缀和,同时模上N。原创 2023-06-11 10:14:55 · 31 阅读 · 0 评论 -
【倍数】ABC174 C - Repsept
枚举数字的长度,边枚举边模,如果模的结果是0那就是K的倍数。原创 2023-06-09 14:26:58 · 60 阅读 · 0 评论 -
【构造+数论+Tree树上染色】CF1627C
如果出的简单一点,那就是手推样例,直接模仿样例给的构造,或者直接最特殊的情况,这种最特殊的情况就算全部猜一遍也能猜出来。一开始模拟了一下样例,Sample3告诉我们如果有三条边相邻就是无解(可以猜的结论)给定一棵树的形态,让你给这棵树的边赋值,使得每对相邻的边的边权和都是质数。然后不知道该怎么具体赋值,不知道该怎么特殊化边权。事实上,只需要2,3,2,3这样子赋值即可。难的我也不懂,还没写过难的构造题。感觉2000分以下的构造。原创 2023-05-31 14:05:17 · 103 阅读 · 0 评论 -
【gcd】CF826div2 B
【代码】【gcd】CF826div2 B。原创 2023-05-15 23:50:14 · 41 阅读 · 0 评论 -
【枚举gcd】P4571 [JSOI2009] 瓶子和燃料
就是让你在n个值里选k个值,使得其gcd最大。设gcd(b1,b2,....,bk)=t。即gcd(b1,b2,....bk)最大。然后合法性就是看t的出现次数是否>=k。gcd的经典套路,枚举gcd即可。原创 2023-05-14 09:58:40 · 38 阅读 · 0 评论 -
【CRT】Biorhythms
在求CRT时,逆元用欧拉定理求。原创 2023-05-13 15:15:19 · 44 阅读 · 0 评论 -
【逆元+等比数列】CF963A Alternating Sum
【代码】【逆元+等比数列】CF963A Alternating Sum。原创 2023-05-13 12:02:30 · 45 阅读 · 0 评论 -
【枚举+数学】CF1781D Many Perfect Squares
x,0~1e18:O(1)计算。n,1~50:对n暴力。原创 2023-05-11 23:07:55 · 136 阅读 · 0 评论 -
【sorting+双指针+数学】CF845div2 C. Quiz Master
一开始想的也是排序,然后双指针,但是我想的双指针是l=1,r=n的,因为我没注意到。其实就是尺取法,然后合法性就是这个区间内的数的所有因子能填满1~m这些格子。和我一开始想的不太一样。原创 2023-05-11 23:03:23 · 135 阅读 · 0 评论