考虑到年份数很小,只有 \(6\),所以可以 \(2^6\) 来枚举子集,确定流量指数对应相同的位置,然后通过哈希和排序来计算相同的方案数。

但是这样计算出的是大于等于子集元素个数的方案数,所以还需要通过容斥来得到恰好为 \(k\) 的方案数。设子集元素个数为 \(num\),其容斥系数为 \((-1)^{num-k}\binom{num}{k}\),还需乘上组合数的原因是相同个数恰好为 \(num\) 的方案数对相同个数大于等于 \(k\) 的方案数的贡献为 \(\binom{num}{k}\)。

为了防止被卡,我这里用了双哈希来实现。

\(code:\)

  1. #include<bits/stdc++.h>
  2. #define maxn 100010
  3. #define p1 998244353
  4. #define p2 1000000007
  5. #define b1 131
  6. #define b2 137
  7. using namespace std;
  8. typedef long long ll;
  9. template<typename T> inline void read(T &x)
  10. {
  11. x=0;char c=getchar();bool flag=false;
  12. while(!isdigit(c)){if(c=='-')flag=true;c=getchar();}
  13. while(isdigit(c)){x=(x<<1)+(x<<3)+(c^48);c=getchar();}
  14. if(flag)x=-x;
  15. }
  16. ll n,k,ans;
  17. ll a[maxn][10],C[10][10];
  18. bool tag[6];
  19. struct node
  20. {
  21. ll h1,h2;
  22. }t[maxn];
  23. bool cmp(const node &a,const node &b)
  24. {
  25. if(a.h1==b.h1) return a.h2<b.h2;
  26. return a.h1<b.h1;
  27. }
  28. void init()
  29. {
  30. for(int i=0;i<=6;++i) C[i][0]=1;
  31. for(int i=1;i<=6;++i)
  32. for(int j=1;j<=i;++j)
  33. C[i][j]=C[i-1][j]+C[i-1][j-1];
  34. }
  35. ll calc(int s)
  36. {
  37. for(int i=1;i<=n;++i) t[i].h1=t[i].h2=0;
  38. for(int i=1;i<=n;++i)
  39. {
  40. for(int j=1;j<=6;++j)
  41. {
  42. t[i].h1=(t[i].h1*b1%p1+a[i][j]*tag[j])%p1;
  43. t[i].h2=(t[i].h2*b2%p2+a[i][j]*tag[j])%p2;
  44. }
  45. }
  46. sort(t+1,t+n+1,cmp);
  47. ll cnt=0,sum=0;
  48. for(int i=2;i<=n;++i)
  49. {
  50. if(t[i].h1==t[i-1].h1&&t[i].h2==t[i-1].h2) cnt++,sum+=cnt;
  51. else cnt=0;
  52. }
  53. return sum;
  54. }
  55. int main()
  56. {
  57. read(n),read(k),init();
  58. for(int i=1;i<=n;++i)
  59. for(int j=1;j<=6;++j)
  60. read(a[i][j]);
  61. for(int s=0;s<=63;++s)
  62. {
  63. int num=0;
  64. for(int i=1;i<=6;++i)
  65. {
  66. if(s&(1<<(i-1))) num++,tag[i]=true;
  67. else tag[i]=false;
  68. }
  69. if(num<k) continue;
  70. ll val=calc(s)*C[num][k];
  71. if((num-k)&1) ans-=val;
  72. else ans+=val;
  73. }
  74. printf("%lld",ans);
  75. return 0;
  76. }

题解 洛谷 P3298 【[SDOI2013]泉】的更多相关文章

  1. [洛谷P3304] [SDOI2013]直径

    洛谷题目链接:[SDOI2013]直径 题目描述 小Q最近学习了一些图论知识.根据课本,有如下定义.树:无回路且连通的无向图,每条边都有正整数的权值来表示其长度.如果一棵树有N个节点,可以证明其有且仅 ...

  2. Bzoj3197/洛谷3296 [SDOI2013]刺客信条assassin(树的重心+树Hash+树形DP+KM)

    题面 Bzoj 洛谷 题解 (除了代码均摘自喻队的博客,可是他退役了) 首先固定一棵树,枚举另一棵树,显然另一棵树只有与这棵树同构才有可能产生贡献 如果固定的树以重心为根,那么另一棵树最多就只有重心为 ...

  3. 题解 洛谷P5018【对称二叉树】(noip2018T4)

    \(noip2018\) \(T4\)题解 其实呢,我是觉得这题比\(T3\)水到不知道哪里去了 毕竟我比较菜,不大会\(dp\) 好了开始讲正事 这题其实考察的其实就是选手对D(大)F(法)S(师) ...

  4. 题解 洛谷 P3396 【哈希冲突】(根号分治)

    根号分治 前言 本题是一道讲解根号分治思想的论文题(然鹅我并没有找到论文),正 如论文中所说,根号算法--不仅是分块,根号分治利用的思想和分块像 似却又不同,某一篇洛谷日报中说过,分块算法实质上是一种 ...

  5. 题解-洛谷P5410 【模板】扩展 KMP(Z 函数)

    题面 洛谷P5410 [模板]扩展 KMP(Z 函数) 给定两个字符串 \(a,b\),要求出两个数组:\(b\) 的 \(z\) 函数数组 \(z\).\(b\) 与 \(a\) 的每一个后缀的 L ...

  6. 题解-洛谷P4229 某位歌姬的故事

    题面 洛谷P4229 某位歌姬的故事 \(T\) 组测试数据.有 \(n\) 个音节,每个音节 \(h_i\in[1,A]\),还有 \(m\) 个限制 \((l_i,r_i,g_i)\) 表示 \( ...

  7. 题解-洛谷P4724 【模板】三维凸包

    洛谷P4724 [模板]三维凸包 给出空间中 \(n\) 个点 \(p_i\),求凸包表面积. 数据范围:\(1\le n\le 2000\). 这篇题解因为是世界上最逊的人写的,所以也会有求凸包体积 ...

  8. 题解-洛谷P4859 已经没有什么好害怕的了

    洛谷P4859 已经没有什么好害怕的了 给定 \(n\) 和 \(k\),\(n\) 个糖果能量 \(a_i\) 和 \(n\) 个药片能量 \(b_i\),每个 \(a_i\) 和 \(b_i\) ...

  9. 题解-洛谷P5217 贫穷

    洛谷P5217 贫穷 给定长度为 \(n\) 的初始文本 \(s\),有 \(m\) 个如下操作: \(\texttt{I x c}\),在第 \(x\) 个字母后面插入一个 \(c\). \(\te ...

随机推荐

  1. centos下面基本的linux命令操作

    参考视频: 1.如何打开命令窗口 鼠标点击右键,选择open Terminal就可以打开命令行窗口了. 现在我们可以调整这个窗口的大小,增大窗口大小使用ctrl+shif+加号,缩小窗口ctrl+减号 ...

  2. 3.尚硅谷_MyBatis_HelloWorld.avi

    CREATE TABLE `tbl_employee` ( `id` int(11) NOT NULL AUTO_INCREMENT, `last_name` varchar(255) DEFAULT ...

  3. 使用反应式关系数据库连接规范R2DBC操作MySQL数据库

    1. 简介 三月份已经介绍过R2DBC,它是一种异步的.非阻塞的关系式数据库连接规范.尽管一些NoSQL数据库供应商为其数据库提供了反应式数据库客户端,但对于大多数项目而言,迁移到NoSQL并不是一个 ...

  4. ArrayList类的使用

    ArrayList常用类方法 (1)添加元素 public boolean add(E element) 在集合末端添加一个元素 public void add(int index,E element ...

  5. 基于flink和drools的实时日志处理

    1.背景 日志系统接入的日志种类多.格式复杂多样,主流的有以下几种日志: filebeat采集到的文本日志,格式多样 winbeat采集到的操作系统日志 设备上报到logstash的syslog日志 ...

  6. eclipse导入git项目

    复制项目的git路径 Eclipse打开 Git Repostitories 视图 弹出show view窗口 选择ok ,进入git repositories 视图窗口 我这里已经导入从我的git仓 ...

  7. eclipse clone克隆github远程库工程到本地

    项目作者把项目push到github远程库,其他用户可以把项目克隆到本地: eclipse里的操作具体如下: File -> Import... 找到Git 选择 Project from Gi ...

  8. 小米商城项目(JSP+Servlet项目)

    小米商城项目 项目已托管到GitHub,大家可以去GitHub查看下载!并搜索关注微信公众号 码出Offer 领取各种学习资料! 在这里插入图片描述 基于Servlet+JSP开发的小米商城项目,因为 ...

  9. web单页应用是什么?它的好处与坏处有哪些(如何解决这些缺点)

    web单页应用是什么? Web单页应用就是指只有一个Web页面作为入口的应用,在浏览器中运行期间不会重新加载页面.也就是说浏览器一开始会加载它必需的thml.css和Js,之后所有的交互操作都在一个页 ...

  10. Problem C Emergency Evacuation 一道思维题

    题目描述 输入 输出 样例 样例输入 样例输入一 样例输入二 样例输出 样例输出一 9 样例输出二 1008 一句话题意:给你一个车厢和一些人,这些人都坐在座位上,求这些人全部出去的时间最小值. 分析 ...