BZOJ3198 [Sdoi2013]spring 哈希 容斥原理
欢迎访问~原文出处——博客园-zhouzhendong
去博客园看该题解
题目传送门 - BZOJ3198
题意概括
有n(1<=n<=100000)组数据,每组数据6个数。
现在问有几对数据,满足其数字相同的个数恰好为k。
0<=k<=6
题解
首先暴搜是不行的。
然后我们发现可以哈希+容斥。
对于有至少有x个数字相同的情况,我们可以枚举+hash解决(这个很简单,不用说了吧)。
然后是最关键的。
假设ans[i]表示至少有i个相同的情况总数。
那么会有重复:
比如某4个数相同,那么在其相应的ans[3]中,有一部分值是这4个数的排列。
比如某两组数据的第1,2,3,4个数字相等,那么对于1,2,3相等,1,2,4相等,1,3,4相等,2,3,4相等都算了一遍,所以ans[3]要减掉ans[4]*C(4,3)
那么同理,所有的从大到小减一减,然后就得出了答案。
代码
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <cstdlib>
using namespace std;
typedef long long LL;
const int N=100005;
LL MOD=1000000007,MOD2=998244353,Ti=23333,Ti2=65119;
int n,k;
LL a[N][6],ans[6],C[10][10],v[N],v2[N];
int cnt1(int x){
int ans=0;
while (x)
ans+=x&1,x>>=1;
return ans;
}
LL solve(int k){
LL ans=0;
for (int i=0;i<(1<<6);i++){
if (cnt1(i)!=k)
continue;
for (int j=1;j<=n;j++){
v[j]=v2[j]=0;
for (int k=0;k<6;k++)
if (i&(1<<k))
v[j]=(v[j]*Ti+a[j][k])%MOD,v2[j]=(v2[j]*Ti2+a[j][k])%MOD2;
v[j]+=v2[j]*2033333333;
}
sort(v+1,v+n+1);
v[n+1]=v[n]+1;
int prev=1;
for (int j=2;j<=n+1;j++)
if (v[j]!=v[j-1])
ans+=1LL*(j-prev)*(j-prev-1)/2,prev=j;
}
return ans;
}
int main(){
scanf("%d%d",&n,&k);
for (int i=1;i<=n;i++)
for (int j=0;j<6;j++)
scanf("%lld",&a[i][j]);
for (int i=0;i<=6;i++)
ans[i]=solve(i);
memset(C,0,sizeof C);
for (int i=0;i<=6;i++)
C[i][0]=1;
for (int i=1;i<=6;i++)
for (int j=1;j<=i;j++)
C[i][j]=C[i-1][j]+C[i-1][j-1];
for (int i=6;i>=1;i--)
for (int j=0;j<i;j++)
ans[j]-=ans[i]*C[i][j];
printf("%lld\n",ans[k]);
return 0;
}
BZOJ3198 [Sdoi2013]spring 哈希 容斥原理的更多相关文章
- bzoj3198[Sdoi2013]spring 容斥+hash
3198: [Sdoi2013]spring Time Limit: 40 Sec Memory Limit: 256 MBSubmit: 1143 Solved: 366[Submit][Sta ...
- BZOJ3198[SDOI2013]SPRING
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 [容斥原理 哈希表]
3198: [Sdoi2013]spring 题意:n个物品6个属性,求有多少不同的年份i,j满足有k个属性对应相等 一开始读错题了,注意是对应相等 第i个属性只能和第i个属性对应 容斥一下 \[ 恰 ...
- BZOJ_3129_[Sdoi2013]方程_组合数学+容斥原理
BZOJ_3129_[Sdoi2013]方程_组合数学+容斥原理 Description 给定方程 X1+X2+. +Xn=M 我们对第l..N1个变量进行一些限制: Xl < = A ...
- 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 [ ...
- 3198: [Sdoi2013]spring【容斥原理+hash】
容斥是ans= 至少k位置相等对数C(k,k)-至少k+1位置相等对数C(k+1,k)+至少k+2位置相等对数*C(k+2,k) -- 然后对数的话2^6枚举状态然后用hash表统计即可 至于为什么要 ...
- BZOJ 3198 SDOI2013 spring
为什么SDOI省选一年考两次容斥原理? 我们很容易发现>=k个相等时很好计算的 但是我们要求恰好k个,那么我们容斥即可 至于计算>=k个相等,首先我们枚举相等位置,对每个串对应位置做一遍h ...
- [BZOJ 3198] [Sdoi2013] spring 【容斥 + Hash】
题目链接:BZOJ - 3198 题目分析 题目要求求出有多少对泉有恰好 k 个值相等. 我们用容斥来做. 枚举 2^6 种状态,某一位是 1 表示这一位相同,那么假设 1 的个数为 x . 答案就是 ...
- [SDOI2013]spring
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 容 ...
随机推荐
- Java——Struts2 之国际化 struts.custom.i18n.resources=globalMessages
1.在src下 建立 struts.properties 文件,内容为:struts.custom.i18n.resources=globalMessages struts.custom.i18n.r ...
- 深度神经网络tricks and tips
1)data augmentation (augment 增加,aug:to increase 词根,同August(奥古斯特即凯撒大帝,自认为最伟大的帝王,他出生在八月,他以自己的名字命名这个月)同 ...
- Hyper-V和其他虚拟机共存 【转】
由于Windows中Hyper-V的实现方式在系统中为独占,所以其不能与其他的虚拟机共存. 下面的方法是在系统中新增一个启动项,在这个启动项中关闭Hyper-V,这样就可以安装并使用其他虚拟机了.需要 ...
- CF875D High Cry
传送门 题目要求合法的区间个数,这里考虑用总区间个数减去不合法的个数 假设某个数为区间最大值,那么包含这个数的最长区间内,所有数小于他并且所有数没有这个最大值没有的二进制位,可以按位考虑每个数\(i\ ...
- 12章 搜索框架ElasticSearch介绍和整合SpringBoot 4节课
1.搜索引擎知识和搜索框架elasticsearch基本介绍 简介:通过京东电商 介绍什么是搜索引擎,和开源搜索框架ElasticSearch6.x新特性介绍 前言:介绍ES的主要特点和使用场 ...
- 【ARTS】01_03_左耳听风-20181126~1202
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
- zabbix3.0.4安装grapha实现多台主机相同监控项集中展示
zabbix3.0.4安装grapha图形展示系统 操作系统 # cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) 1.安装g ...
- nagios系列(五)之nagios图形显示的配置及自定义插件检测密码是否修改详解
nagios图形显示的配置 在服务端安装相关软件 #1.图形显示管理的依赖库 yum install cairo pango zlib zlib-devel freetype freetype-dev ...
- 解执行maven项目出现 SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder”. error
最近再弄maven项目,运行起来没有问题,但是Console控制台会报错,比如说如下的问题异常提示: 由此我们可以看出,报出错误的地方主要是slf4j的jar包,而故障码中“Failed to loa ...
- [学习笔记]Javascript的包装对象
例子1: var s="test"; s.len = 4; var t = s.len // t is undefined 原因是s是字符串,第二行代码,实际上是创建一个临时字符串 ...