随笔分类 - ACM
大二到大三不堪回首的记忆....
摘要:原题链接 考察:容斥原理+组合数学 错误思路: 想得有点复杂,考虑未修改a数组的gcd的值,然后修改后的gcd的值,这么想完全没得思路. 正确思路: 假定当前$gcd(b_1,b_2,b_3,...,b_n) = d$,a数组有$cnt$个$d$的倍数. \(n-cnt>k,ans = 0\) \(
阅读全文
摘要:原题链接 考察:莫比乌斯反演 菜狗不会啊QAQ 思路: 参考了大佬的题解,我们列出求答案的式子. \(\sum_{k=1}^{min(n,m)}[f[k]<=p]\sum_{i=1}^n\sum_{j=1}^m[gcd(i,j)==k]\) 注意:f[k]为k的质因子个数. \(\sum_{k=1}
阅读全文
摘要:原题链接 考察:容斥原理 思路: xOz,yOz,xOy三个面就是当作二维面计算,每次计算*3即可.三维也是利用莫比乌斯函数计算,即容斥原理. ##Code #include <iostream> #include <cstring> using namespace std; typedef lon
阅读全文
摘要:原题链接 考察:容斥原理(二项式反演) 思路: 根据题意,定义$g[i]$为使用颜色不超过i种的方案数,这个比较好求,但是$f[i]$恰好为i个就比较难求. 但我们可以发现: \(g[i] = C_i^0 f[0]+C_i^1 f[1] + C_i^2 f[2]+...+C_i^i f[i]\) 这
阅读全文
摘要:原题链接 考察:构造 参考官方题解的思路: 假定原序列是从小到大排序的: \(a:1,2,3,4,5\) 将原序列左移或者右移一位,就可以使得子序列的和不同. \(b:2,3,4,5,1\) 证明: (1) 不考虑原序列最大的数,其他位上的每一位数都是$a[i]<b[i]$,如果$S$内没用原序列最
阅读全文
摘要:原题链接 考察:思维+枚举 思路: 思路应该比较好想,只要存在互质的两对,答案就是数组长度-数组中1的个数.如果不存在,答案就是最短连续子段gcd = 1的长度*2+其他元素个数. 我写的时候认为最短一定是3,实际不是,看下面测试数据: 6 120 120 5 30 15 6 ans = 8. gc
阅读全文
摘要:原题链接 考察:抽屉原理+思维 思路: 一共n个数,如果存在%n==0的数,那么直接输出.如果不存在,余数在1~n-1之间有n个数.根据抽屉原理,必然存在两个余数相等的数(但不一定存在两个相加==n的数).余数相等有什么用呢?说明(r-l)%n == 0.这里就可以用前缀和求解. ##Code #i
阅读全文
摘要:原题链接 考察:思维 思路: 神仙题.想了半天还以为和一元二次方程的$b2-4ac$有关系,结果没多大关系(.),或者可能是本蒟蒻没想到 一般是将两个未知量划到左右两边个一边,枚举其中一个来确定方案数. \(y^2-x^2 = ax+b\) \(y^2 = x^2+ax+b\) \(4y^2 = 4
阅读全文
摘要:原题链接 考察:组合数学 直接给我梦回高中排列组合,考的是插空法,我完全没印象.... 思路: 先排列m个树苗,方法是$m!$,接下来先将空插到树苗中间,此时还剩下$n-2m+1$个空位,这$n-2m+1$个空位分为m+1组,这里可以用隔板法求解,求组合数我求麻烦了点,可以直接求. ##Code #
阅读全文
摘要:原题链接 考察:容斥原理 思路: 这个容斥思路应该很经典了,硬币购物也是这个思路. 如果不考虑限制,方法数就是隔板法求解:\(C_{n+m-1}^{n-1}\),但是有限制的情况下就不能这么求解. 直接求不好做,考虑求补集.至少不满足一个条件的情况,至少不满足两个条件的情况容斥即可.但是至少不满足一
阅读全文
摘要:原题链接 考察:组合计数 思路: 有两种推到最后$C_{r+l+k}^k$的方法.主要思想就是构造严格单调递增的序列. 方法一: \(L<=a_1<=a_2<=a_3<=...<=a_k<=R\) 如果直接求的话,需要讨论用几个数填满k个位置,这就是相当于隔板法.但是k范围太大,难以预处理此方法不可
阅读全文
摘要:原题链接 考察:组合数学+gcd 思路: 不考虑共线情况,总的方案数是$C_{n+m}^3$,考虑共线的话,直接求共线的方案数比不共线好求.那么我们就利用容斥原理即可. 对于共线的三个点,如果确定了起点和终点,中间点的取法就是gcd(长,宽)-1.对于共线,我们以长宽分类,求当前长i,宽j的三角形个
阅读全文
摘要:原题链接 考察:组合数 思路: 类似高中数学排列组合题....我是fw,还以为是dp,结果就是简单的求组合数....分为放在b,d两类. 排列数这里用的递推方式,所以没用乘法逆元. ##Code #include <iostream> #include <cstring> using namespa
阅读全文
摘要:原题链接 考察:计数dp 思路: 隔板法的模板题,适用于求n个苹果分给k个盘子,且每个盘子不为0的排列数. 实际是求$C_^$.需要高精 ##Code #include <iostream> #include <cstring> using namespace std; typedef long l
阅读全文
摘要:原题链接 考察:计数dp 思路: 虽然之前接触过计数dp,但是碰到这种题第一反应除了组合数之外毫无想法,今天学计数dp才发现不止组合数这一知识点. 有两种方法.以不同的划分状态依据. 方法一: 定义 f[i] 为i头牛并排站的方案数.以最后一头牛是什么品种来划分.如果最后一头牛为A牛,则剩下的i-1
阅读全文
摘要:原题链接 考察:矩阵快速幂 思路: 想了dp转移方程,看了题解发现没有这么复杂,利用邻接矩阵的性质就行了,参考Floyd算法,外层每循环一次,相当于经过了一条边,也是转移到了一个新的状态. 把停留看成自环,城市之间的道路就等同于邻接矩阵的原本意义,但是爆炸就比较难处理.大佬的思路是建立虚点,该点只有
阅读全文
摘要:原题链接 考察:前缀和+二分 错误思路: 求每个$kk$矩阵的最大值,没想出来,还以为是dp 思路: 将最大值问题转换为个数问题,求在ans时间内,$kk$矩阵和 = k*k是否为true.这里二分+前缀和(树状数组)解决. 时间复杂度O(\(n*m*log_2 q\)) ##Code #inclu
阅读全文
摘要:原题链接 考察:枚举,前缀和 和本题的正解思路有点像的 >Go 题意: 在数组中放三个间断点,使得res最大. 思路: 三个间断点求最值,不能是在前缀区间只取正数,后缀区间只取负数,存在隔了负数出现大正数的情况. 可以枚举中间点mid,求[1,mid]的最大前缀,[mid,n]的最小后缀,两个for
阅读全文

浙公网安备 33010602011771号