欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ3198 题意概括 有n(1<=n<=100000)组数据,每组数据6个数. 现在问有几对数据,满足其数字相同的个数恰好为k. 0<=k<=6 题解 首先暴搜是不行的. 然后我们发现可以哈希+容斥. 对于有至少有x个数字相同的情况,我们可以枚举+hash解决(这个很简单,不用说了吧). 然后是最关键的. 假设ans[i]表示至少有i个相同的情况总数. 那么会有重复: 比如某4个数相同,…
3198: [Sdoi2013]spring Time Limit: 40 Sec  Memory Limit: 256 MBSubmit: 1143  Solved: 366[Submit][Status][Discuss] Description Input Output Sample Input 3 3 1 2 3 4 5 61 2 3 0 0 00 0 0 4 5 6 Sample Output 2 HINT Dragonite修正数据 Source Hash 容斥简单,但是hash有点…
Description Input Output Sample Input 3 3 1 2 3 4 5 6 1 2 3 0 0 0 0 0 0 4 5 6 Sample Output 2 HINT 题解: 一脸容斥的样子. 枚举判断是否相同的泉水集合S,若|S|>=K,则inc(ANS,(-1)^(|S|-K+1)*C(|S|,K)*相同对数). 用哈希表记录.判断(我之前竟然写了类似字符串哈希的的做法,哈希值相同直接判断相同,WA惨了). 代码: var i,j,k,l,n,m:longint…
3198: [Sdoi2013]spring 题意:n个物品6个属性,求有多少不同的年份i,j满足有k个属性对应相等 一开始读错题了,注意是对应相等 第i个属性只能和第i个属性对应 容斥一下 \[ 恰好k个相等=\ge k个相等 \ -\ \ge k+1个相等\ +\ \ge k+2个相等 \ ... \] \(2^6\)枚举哪些属性对应相等,哈希一下计算这些属性相等的个数,这时候其他是任意的因为是\(\ge\) 这样还不行,容斥系数还要乘上\(\binom{i}{k}\),因为两个k+1个属性…
BZOJ_3129_[Sdoi2013]方程_组合数学+容斥原理 Description 给定方程     X1+X2+. +Xn=M 我们对第l..N1个变量进行一些限制: Xl < = A X2 < = A2 Xn1 < = An1 我们对第n1 + 1..n1+n2个变量进行一些限制: Xn1+l > = An1+1 Xn1+2 > = An1+2 Xnl+n2 > = Anl+n2 求:在满足这些限制的前提下,该方程正整数解的个数. 答案可能很大,请输出对p取模…
Description Input Output Sample Input 3 3 1 2 3 4 5 6 1 2 3 0 0 0 0 0 0 4 5 6 Sample Output 2 HINT [思路] 容斥原理+Hash 恰有k个元素相同的对数=至少k+1个相同*C(k+1,k) - 至少k+2个相同*C(k+2,k) + …… 枚举状态i,如果是101表示至少1和3两个相同,把n个年份关于i构造一个hash,然后放入hash中统计.这里只是关于位是1的构造hash,其他位都忽略了,所以得…
容斥是ans= 至少k位置相等对数C(k,k)-至少k+1位置相等对数C(k+1,k)+至少k+2位置相等对数*C(k+2,k) -- 然后对数的话2^6枚举状态然后用hash表统计即可 至于为什么要乘上一个组合数,详见 https://www.cnblogs.com/candy99/p/6616809.html 我理解的是,因为是枚举状态统计,所以会重复计算C(k+i,k)次 #include<iostream> #include<cstdio> #include<algo…
为什么SDOI省选一年考两次容斥原理? 我们很容易发现>=k个相等时很好计算的 但是我们要求恰好k个,那么我们容斥即可 至于计算>=k个相等,首先我们枚举相等位置,对每个串对应位置做一遍hash就可以了 #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<cstdlib> using namespace std; type…
题目链接:BZOJ - 3198 题目分析 题目要求求出有多少对泉有恰好 k 个值相等. 我们用容斥来做. 枚举 2^6 种状态,某一位是 1 表示这一位相同,那么假设 1 的个数为 x . 答案就是 sigma((-1)^(x - k) * AnsNow * C(x, k)) .注意 x 要大于等于 k. 对于一种状态,比如 10110,就是要保证第 1, 3, 4 个值相同. 这些值相同的对数怎么来求呢?使用Hash. 将这些位上的值 Hash 成一个数,然后枚举  [1, i] , 每次求…
Description Input Output Sample Input 3 3 1 2 3 4 5 6 1 2 3 0 0 0 0 0 0 4 5 6 Sample Output 2 HINT 容斥部分其实很好想,我们考虑枚举有哪些泉区的泉水可能相同,答案即为\(Ans=\sum\limits_{i=k}^6(-1)^{i-k}\times \binom{i}{k}\times work(i)\) 考虑如何求work?我们可以\(2^6\)枚举考虑哪些泉区,然后对其进行hash,记录下相同h…