bzoj3198[Sdoi2013]spring 容斥+hash
3198: [Sdoi2013]spring
Time Limit: 40 Sec Memory Limit: 256 MB
Submit: 1143 Solved: 366
[Submit][Status][Discuss]
Description
.jpg)
Input
.jpg)
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
Dragonite修正数据
Source
容斥简单,但是hash有点麻烦。
ans= 至少k的对数*C(k,k) - 至少k+1的对数*C(k+1,k) + 至少k+2的对数*C(k+2,k) ...
对于这个C(i+k,k),我的理解这对数被计算了C(k+i,k)次
hash判断冲突。。至少我不会,别人博客学习了一波
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#define ll long long
#define N 100005
#define mod 2150527
using namespace std;
int a[N][10],bin[10],hd[mod+10],vis[mod+10],c[10][10],sum[N],nxt[N],n,m;
ll val[N];
void pre(){
for(int i=0;i<=6;i++)c[i][0]=c[i][i]=1;
for(int i=1;i<=6;i++)
for(int j=1;j<i;j++)
c[i][j]=c[i-1][j-1]+c[i-1][j];
}
ll calc(int st){
ll ans=0;int tot=0;
for(int i=1;i<=n;i++){
ll tmp=0;int j,k;
for(j=1;j<=6;j++)if(st&bin[j-1])tmp=tmp*1000003+a[i][j];
j=tmp%mod;j<0?j+=mod:1;
if(vis[j]!=st){vis[j]=st;hd[j]=0;}
for(k=hd[j];k;k=nxt[k]){
if(val[k]==tmp){
ans+=sum[k];sum[k]++;
break;
}
}
if(!k){
val[++tot]=tmp;
sum[tot]=1;nxt[tot]=hd[j];hd[j]=tot;
}
}
return ans;
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
for(int j=1;j<=6;j++)
scanf("%d",&a[i][j]);
bin[0]=1;pre();
for(int i=1;i<=8;i++)bin[i]=bin[i-1]<<1;
ll ans=0;
for(int i=0;i<64;i++){
int cnt=0;
for(int j=0;j<6;j++)
if(i&bin[j])cnt++;
if(cnt<m)continue;
ll t=calc(i)*c[cnt][m];
if((cnt-m)%2)ans-=t;
else ans+=t;
}
cout<<ans;
return 0;
}
bzoj3198[Sdoi2013]spring 容斥+hash的更多相关文章
- [BZOJ 3198] [Sdoi2013] spring 【容斥 + Hash】
题目链接:BZOJ - 3198 题目分析 题目要求求出有多少对泉有恰好 k 个值相等. 我们用容斥来做. 枚举 2^6 种状态,某一位是 1 表示这一位相同,那么假设 1 的个数为 x . 答案就是 ...
- BZOJ3198 [Sdoi2013]spring 哈希 容斥原理
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ3198 题意概括 有n(1<=n<=100000)组数据,每组数据6个数. 现在问有几对 ...
- 3198: [Sdoi2013]spring【容斥原理+hash】
容斥是ans= 至少k位置相等对数C(k,k)-至少k+1位置相等对数C(k+1,k)+至少k+2位置相等对数*C(k+2,k) -- 然后对数的话2^6枚举状态然后用hash表统计即可 至于为什么要 ...
- [SDOI2013]泉(容斥)
/* 容斥加上哈希 首先我们可以2 ^ 6枚举相同情况, 然后对于这些确定的位置哈希一下统计方案数 这样我们就统计出了这些不同方案的情况, 然后容斥一下就好了 */ #include<cstdi ...
- 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(容斥原理+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 3202 [Sdoi2013]项链——容斥+置换+推式子
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3202 可见Zinn博客:https://www.cnblogs.com/Zinn/p/100 ...
- [BZOJ3622]已经没有什么好害怕的了(容斥DP)
给定两个数组a[n]与b[n](数全不相等),两两配对,求“a比b大”的数对比“b比a大”的数对个数多k的配对方案数. 据说做了这题就没什么题好害怕的了,但感觉实际上这是一个套路题,只是很难想到. 首 ...
- 【BZOJ3129】[SDOI2013]方程(容斥,拓展卢卡斯定理)
[BZOJ3129][SDOI2013]方程(容斥,拓展卢卡斯定理) 题面 BZOJ 洛谷 题解 因为答案是正整数,所先给每个位置都放一个就行了,然后\(A\)都要减一. 大于的限制和没有的区别不大, ...
随机推荐
- 算法第四版学习笔记之优先队列--Priority Queues
软件:DrJava 参考书:算法(第四版) 章节:2.4优先队列(以下截图是算法配套视频所讲内容截图) 1:API 与初级实现 2:堆得定义 3:堆排序 4:事件驱动的仿真 优先队列最重要的操作就是删 ...
- nyoj Color the fence
Color the fence 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 Tom has fallen in love with Mary. Now Tom w ...
- JavaSE阶段初期的一些问题
对于如下问题1:编译阶段Demo1会报错,Demo2不会报错. class Demo1{ int i; i = 0; } class Demo2{ int i = 0; } 事实上,在java中 ...
- Python基础学习篇章二
一. Python如何运行程序 1. 在交互模式下编写代码 最简单的运行Python程序的方法是在Python交互命令行中输入程序.当然有很多方法可以开始这样的命令行,比如IDE,系统终端.如果你已经 ...
- Java排序算法之快速排序
Java排序算法之快速排序 快速排序(Quicksort)是对冒泡排序的一种改进. 快速排序由C. A. R. Hoare在1962年提出.它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分 ...
- 第三章 jQuery中的事件与动画
第三章jQuery中的事件与动画 一. jQuery中的事件 jQuery事件是对javaScript事件的封装. 1.基础事件 在javaScript中,常用的基础事件有鼠标事件.键盘事件.wind ...
- python 网络爬虫与信息提取 学习笔记day4
正则表达式简介: 简洁表示一组字符串的特征或者模式,在文本处理中十分常用,主要应用于字符串匹配中 1. 通用的字符串表达框架 2. 简洁表达一组字符串的表达式 3. 针对字符串表达简洁和特征思想 ...
- leetcode算法:Next Greater Element I
You are given two arrays (without duplicates) nums1 and nums2 where nums1's elements are subset of n ...
- mysql自带的example测试数据库导入Centos6.5
1.下载数据库 下载地址: [test数据库] (https://github.com/datacharmer/test_db) 不出意外的话,下载下来是个unzip文件. 2.上传到数据库服务器 r ...
- Windows10 64位系统安装 .NET Framework 3.5
1)下载NET Framework 3.5 [地址:https://pan.baidu.com/s/1c1FhXLY] 2)编辑NET Framework 3.5.bat ,修改sxs文件存放路径: ...