容斥,钦定 \(i\) 个数 \(\leq 1\) 次。 \[Ans=\sum_{i=0}^n (-1)^i\binom{n}{i}F(i) \]其中 \(F(i)\) 表示有 \(i\) 个数的出现次数 \(\leq 1\) 次,剩余 \(n-i\) 个数随意的方案数。 方便起见,不妨设这 \(i\) 个数为 \(1,2,\cdots,i\)。可以把所有子集族中的子集分成两类: 含有 \(1,
文章目录 一、题目描述 二、解题思路 三、代码详解 一、题目描述 循环输入。当没有任何输入时,程序结束。
ARC115 E AtCoder Problem Statement Given is a sequence of \(N\) integers \(A_1\),\(A_2\),...,\(A_N\). Print the number, modulo \(998244353\), of sequence of \(N\) integers \(X_1\),\(X_2\),...,\(X_N\) satisfying all of the following condi
这里面是6月份做的一些杂题稍微记录下,但是难度可能没有特别大,再加上时间比较赶,所以没有专门写整篇的题解来整理,题解会较为简略 [NOI2018] 冒泡排序 满足题目要求的序列可以分成不超过两条的上升序列,设\(f_{i,j}\)表示选了\(i\)个数,最大为\(j\)的方案,\(f_{i,j}\)可以转移到\(f_{i
时间限制:1s 内存限制:256MB 【问题描述】 给出m个数a[1],a[2],…,a[m] 求1~n中有多少数不是a[1],a[2],…,a[m]的倍数。 【输入】 输入文件名为count.in。 第一行,包含两个整数:n,m 第二行,包含m个数,表示a[1],a[2],…,a[m] 【输出】 输出文件名为count.out。 输出一行,包含1个整数,表示答
点此看题面 给定一个长度为\(k\)的子串,求有多少个长度为\(n\)、值域为\(1\sim m\)的序列包含这个子串。 \(n\le2\times10^5,k\le10^5,m\le10^8\) 容斥+\(DP\) 考虑容斥,用至少出现一次的方案数减至少出现两次的方案数加至少出现三次的方案数减...... 即,一个至少出现\(i\)次的方案
https://www.luogu.com.cn/problem/P4178 思路: 对u遍历每一棵子树,计算出dis,并询问前面子树有多少个点深度小于等于k−d[i] ,查询有多少值<=k-d[i]的,树状数组就好了。询问结束后把这个子树的答案累加进数组。遍历完所有子树后清空当前u的所有子树答案。注意是Dfs清空。 点分治后
点此看题面 给定一棵\(n\)个点的树(\(n\)为偶数),要求将点两两配对,并给每对点间路径上的边染色。 求有多少种配对方案使得所有边都被染色。 \(n\le5000\) 容斥 这种所有边都染色的问题很容易想到容斥。 即设至少\(k\)条边未被染色,就将这部分答案乘上容斥系数\((-1)^k\)计入最终答案
开场就开始猛干A 然后想了一下发现可以容斥 容斥后就变为了计算公共子串方案数。 每种本质不同子串只有最左边的和最右边的有用。 然后就是区间加等差数列,用线段树做。 由于好久没写sam了,调了很久才过了样例。 结果交上去被卡成暴力分了。 这是因为没有对拍,没有测极限数据 题解: A
CF571A Lengthening Sticks 总加长方案用隔板法计算有 \(\binom{l+3}{3}\) 种(分成四份,其中三份是每条边加长的长度,还有一份是剩下没用的长度,每份都可以为空)。枚举加长后最长的那根木棍和它加长的长度,再用相同的方法计算其它两条边不合法的加长方案数。时间复杂度 \(O(l)\)。
一、题目 听说过这题很久了,这么经典怎么能不做呢? 点此看题 二、解法 由于概率一直在变算着麻烦得很,有一个神奇 \(\tt idea\) 就是我们乱开枪,如果这一枪在鞭尸那么就再开一枪,知道打死第一个人为止。这种策略的证明也不难,对于一个人被打到的概率都只和 \(w_i\) 的比值有关。 然后还
点此看题面 有一个集合\(\{1,2,..,n\}\),问有多少种方式选出它的若干个不同的子集,满足每种元素至少出现两次。 \(n\le3\times10^3\) 广义容斥 这种问题显然一眼想到容斥,设\(f(i)\)表示有至少\(i\)种元素出现次数小于两次的方案数,根据广义容斥的式子就能得到: \[ans=\sum_{i=0}^n(-
题目大意: a,b,c三根木棍可以增加三个不同的数字,aa,bb,cc,且aa+bb+cc<=L,问能构成三角形的木棒有多少种方案 题目思路: 如果我们直接考虑把L分配给aa,bb,cc好像不好下手 所以逆向考虑 合法的情况 = 所有情况 - 不合法的情况 step1: 首先计算所有的情况 假设L当时为l 我们把长
显然不能暴力求解,进一步发现性质,我们要求的是每一个都满足限制。 正难则反,用总方案数-至少一种不满足的方案数 后面那个可以看得出来和容斥定理有关,因此考虑容斥,某个物品不满足,说明他至少取了d[i]+1个,其他随意,因此我们就求出了解答 #include<bits/stdc++.h> using namespace std
扩展lucas+容斥 给出一个方程x1+x2+x3+………xn=m 现在给出两种制约。 制约1:对于前解的前N1个数字,有制约xi<=a[i]; 制约2:对于从N1+1到N1+2的数字,有制约xi>=a[i] 思路:对于制约2,比较好处理,在等式两边同时减去a[i]-1,使得有xi>=1,那么问题转化成了m-c个小球放进n个盒子的问题。然
2020-2-24 正睿听课笔记 最近公公祖先为x的点对数量可以容斥,容斥为公共祖先在x下和在x的儿子下两种情况。 树上距离不超过k的点对连成的图是弦图 完美消除序列是重根开始bfs序列的倒序 与相邻两项有关的考虑分段的那种插入型dp,比如bzoj4664count bzoj4221kangaroo:如果是dp题的话,还
容斥原理 \(\because C_n^0 + C_n^1 + C_n^2 + \ldots + C_n^n = 2^n\) \(\therefore C_n^1 + C_n^2 + \ldots + C_n^n = 2^n - 1\) 实现的时候,奇数加,偶数减。 题意:给定一个整数 n 和 m 个不同的质数 \(p_1, p_2, \ldots, p_m\) 。求 1 ~ n 中能被 \(p_1, p_2, \ldots, p_m\) 中至
[CF449D] Jzzhu and Numbers - 高维前缀和,容斥 Description 从 \(\{a_i\}\) 里面选出一个非空子集使这些数按位与起来为 0,有多少种方案 Solution 容斥,恰好有 0 个 1 的数目 = 至少有 0 个 1 的数目 - 至少有 1 个 1 的数目 + …… 设 gi 表示选择一个子集与起来,使得 i 为 1 的位
原题链接 考察:容斥原理 错误思路: 枚举预处理每一个数C4n 的组合数,将p数组的每一个数求约数集合,将约数个数>=4的纳入容斥的集合内.再用容斥计数解决. 时间复杂度是10000*100*2出现次数>=4的约数个数 ,前面的时间复杂度已经到了1e6,如果个数>7就已经有超时风险,更不
有时候做题需要优化程序,经常遇到有重复的计算,比较影响时间复杂度,于是这里引入容斥原理。 先让我们来看看百度对他的解释: 具体是通过数学归纳法来证明的。 码道题: https://www.51nod.com/Challenge/Problem.html#problemId=1284
传送门 先点分值,求重心分治下去 然后考虑如何计算点 u u u的贡献 首先我们暴力计算出 u u u子树中到
• 我好像dei到了有人做过这题o。 • 来几个兄弟整整 • 组合数没了,怎么说嘛 • 这个题,我只能告诉你,网上的题解,大多拿衣服。 • 但是我毕竟见得多 • 有的小青年就发问了,我不喜欢容斥,我不喜欢组合意义,我永远只爱生成函数,你这种容斥,我很不满意! • 很好!很有精神!那我们就
广告 你还在为计数题发愁吗? 你还在为算重算漏担忧吗? 来试试容斥二项式反演吧! 简介 (上面写的是啥) 二项式反演的用途很多,其中一个比较大的用途是在计数问题中进行容斥 或者说「二项式反演的本质就是容斥」 它可以将「符合某种条件的有至少k个」或者「符合某种条件的有恰好k个」转
在计数时,必须注意没有重复,没有遗漏。为了使重叠部分不被重复计算,人们研究出一种新的计数方法,这种方法的基本思想是:先不考虑重叠的情况,把包含于某内容中的所有对象的数目先计算出来,然后再把计数时重复计算的数目排斥出去,使得计算的结果既无遗漏又无重复,这种计数的方法称为容斥原理
题目 题目地址 题解 先跑一遍完全背包,然后对于第 \(i\) 种物品只能有 \(d_i\) 枚硬币容斥一下。具体的:(强制 \(k\) 个硬币超出限制) \[\sum_{T \subset D,|T|=k} (-1)^k \sum_{j \in T} f[s-c_i(d_i+1)] \](其中,\(D\) 是 \(4\) 种硬币构成的集合,\(f[i]\) 是完全背包后,\(i\) 体积有多