BZOJ 3198: [Sdoi2013]spring [容斥原理 哈希表]
3198: [Sdoi2013]spring
题意:n个物品6个属性,求有多少不同的年份i,j满足有k个属性对应相等
一开始读错题了,注意是对应相等 第i个属性只能和第i个属性对应
容斥一下
\]
\(2^6\)枚举哪些属性对应相等,哈希一下计算这些属性相等的个数,这时候其他是任意的因为是\(\ge\)
这样还不行,容斥系数还要乘上\(\binom{i}{k}\),因为两个k+1个属性对应相等的物品贡献了\(\binom{k+1}{k}\)个k个属性相等
其实就是说,比如\(\ge k\)的时候我们求到的\(\ge k\)个相等的方案数,并不是这样的物品对个数,对于一个\(k+i\)个属性对应相等的物品对我们其实考虑了\(\binom{k+i}{k}\)次,这里本身就出现了重复(不是容斥的原因是我们统计个数的原因),所以要额外消去这个的影响,方法就是乘上那个组合数
我在这里进行了证明
属性值太大很容易冲突所以要用哈希表
然后去学了哈希表...貌似P越小越快啊
```cpp
#include
#include
#include
#include
using namespace std;
typedef long long ll;
const int N=1e5+5, M=23333, P=1001001;//1234567;
inline int read(){
char c=getchar();int x=0,f=1;
while(c'9'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&cint n, k, a[N][7], c[7][7];
struct HashList{
struct meow{int id, c, ne;} e[N*64];
int cnt, h[P], tim[P], Cl;
inline void ini(){Cl++;}
inline bool same(int x, int y, int s) {
for(int i=1; i<=6; i++)
if(s&(1<<(i-1)) && a[x][i] != a[y][i]) return false;
return true;
}
int hash(int a, int s) {
ll val=0;
for(int j=1; j<=6; j++)
if(s&(1<<(j-1))) val = (valM%P + a[j]%P)%P;
return val;
}
int insert(int id, int s) {
int val=hash(a[id], s); //printf("ins %d %d %d\n",id,s,val);
if(tim[val] != Cl) h[val]=0, tim[val]=Cl;
for(int i=h[val];i;i=e[i].ne)
if(same(e[i].id, id, s)) {e[i].c++; return e[i].c-1;}
e[++cnt]=(meow){id, 1, h[val]}; h[val]=cnt;
return 0;
}
}H;
ll cal(int s) {
H.ini();
ll ans=0;
for(int i=1; i<=n; i++)
ans += H.insert(i, s);
return ans;
}
inline int one(int x) {
int ans=0;
while(x) ans++, x&=x-1;
return ans;
}
ll cnt[7];
int main() {
//freopen("in","r",stdin);
n=read(); k=read();
for(int i=1; i<=n; i++)
for(int j=1; j<=6; j++) a[i][j]=read();
c[0][0]=1;
for(int i=1; i<=6; i++) {
c[i][0]=1;
for(int j=1; j<=i; j++) c[i][j] = c[i-1][j] + c[i-1][j-1];
}
int All=1<<6;
for(int s=0; s<All; s++) cnt[one(s)] += cal(s);
ll ans=0;
for(int i=k; i<=6; i++) ans += (( (i-k)&1 ) ? -1 : 1) * c[i][k] * cnt[i];
printf("%lld\n",ans);
}
BZOJ 3198: [Sdoi2013]spring [容斥原理 哈希表]的更多相关文章
- [BZOJ 3198] [Sdoi2013] spring 【容斥 + Hash】
题目链接:BZOJ - 3198 题目分析 题目要求求出有多少对泉有恰好 k 个值相等. 我们用容斥来做. 枚举 2^6 种状态,某一位是 1 表示这一位相同,那么假设 1 的个数为 x . 答案就是 ...
- bzoj 3198 [Sdoi2013]spring(容斥原理+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 [ ...
- BZOJ 3198 SDOI2013 spring
为什么SDOI省选一年考两次容斥原理? 我们很容易发现>=k个相等时很好计算的 但是我们要求恰好k个,那么我们容斥即可 至于计算>=k个相等,首先我们枚举相等位置,对每个串对应位置做一遍h ...
- 3198: [Sdoi2013]spring【容斥原理+hash】
容斥是ans= 至少k位置相等对数C(k,k)-至少k+1位置相等对数C(k+1,k)+至少k+2位置相等对数*C(k+2,k) -- 然后对数的话2^6枚举状态然后用hash表统计即可 至于为什么要 ...
- bzoj3198[Sdoi2013]spring 容斥+hash
3198: [Sdoi2013]spring Time Limit: 40 Sec Memory Limit: 256 MBSubmit: 1143 Solved: 366[Submit][Sta ...
- bzoj 2761 [JLOI2011]不重复数字(哈希表)
2761: [JLOI2011]不重复数字 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3210 Solved: 1186[Submit][Sta ...
- 数据结构 哈希表(Hash Table)_哈希概述
哈希表支持一种最有效的检索方法:散列. 从根来上说,一个哈希表包含一个数组,通过特殊的索引值(键)来访问数组中的元素. 哈希表的主要思想是通过一个哈希函数,在所有可能的键与槽位之间建立一张映射表.哈希 ...
- redisTemplate写哈希表遇到的坑
本文系原创,如有转载,请注明出处 在使用spring的redisTemplate进行redis哈希表的相关操作时,遇到了下面比较奇怪的情况: 1.删掉哈希表所属的key之后,重新get这个key的值, ...
- [PHP内核探索]PHP中的哈希表
在PHP内核中,其中一个很重要的数据结构就是HashTable.我们常用的数组,在内核中就是用HashTable来实现.那么,PHP的HashTable是怎么实现的呢?最近在看HashTable的数据 ...
随机推荐
- Flexbox 练习和总结
练习地址: http://flexboxfroggy.com/ Welcome to Flexbox Froggy, a game where you help Froggy and friends ...
- win10清除桌面快捷方式小箭头
reg add /d "%systemroot%\system32\imageres.dll,197" /t reg_sz /f taskkill /f /im explorer. ...
- 一致性哈希java实现
值得注意的点 哈希函数的选择 murmur哈希函数 该函数是非加密型哈希,性能高,且发生哈希碰撞的概率据说很低 md5 SHA 可以选择guava包,提供了丰富的哈希函数的API 支持虚拟节点+加权, ...
- k8s 创建资源的两种方式 - 每天5分钟玩转 Docker 容器技术(124)
命令 vs 配置文件 Kubernetes 支持两种方式创建资源: 1. 用 kubectl 命令直接创建,比如: kubectl run nginx-deployment --image=nginx ...
- OOAD之策略模式(1)
在引入策略模式之前.先用一个小项目解释为什么要有策略模式.这是一个模拟鸭子的小游戏.最开始需求为,所有的鸭子都会叫以及都会游泳且叫声游泳姿势都一样.因此我们用原始OO的思维去编写代码时很容易做到 pu ...
- Codeforces 448 E. Divisors (DFS,储存结构)
题目链接:E. Divisors 题意: 给出一个X,f(X)是X所有约数的数列(例6:1 2 3 6),给出一个k,k是递归的次数(例:k=2 : f(f(X)) ; X=4,k=2: 1 1 2 ...
- Ubuntu问题:E45: 'readonly' option is set (add ! to override)错误解决
问题描述:E45: 'readonly' option is set (add ! to override) 问题分析:该错误为当前用户没有权限对文件作修改 问题解决: 输入 :w !sudo tee ...
- 数据存储之HTTP Cookie
Cookie (HTTP Cookie) 作用 HTTP本身是无状态的,客户端通过Cookie来存储会话信息 限制 cookie在性质上是绑定在特定域名下的 意思是说当设定了一个cookie之后,再给 ...
- js swipeDelete 滑动删除
先上图看看整体实际效果 看看用法 与参数 默认参数 var defaults = { distance:80, //滑动距离 units:'px', //默认单位 touchStart:functio ...
- 苹果系统css样式变化
原因:苹果自带样式覆盖了 参考文章比较详细,就不自己写了,copy了一份~~~ @参考文章 只要在样式里面加一句去掉css去掉iPhone.iPad的默认按钮样式就可以了!~ input[type=& ...