当前位置: 首页 > news >繁体>bzoj2339: [HNOI2011]卡农

bzoj2339: [HNOI2011]卡农

【题意】
  求出由多少个不同的集合满足下列条件:

    1.集合内含有m个不同的非空数集,每个数集由若干个不同的1~n的数组成。

    2.集合内每个1~n的整数在本集合的所有数集中总共出现偶数次。
  以上提到的集合和数集均不考虑元素的顺序,即含有的元素相同但元素顺序不同被视为同一种集合。
【题解】
  还是得强调看了题解,思想很巧妙。。。。
  直接套式子求出题意所求的集合数是比较困难的。
  所以考虑补集转化的思想。
  首先我们把所有元素顺序不同的集合当不同的算,这样会比较容易,只要方案数最后除去m!就是答案了。。。
  设f[x]为仅需选取x个不同数集就满足条件2的集合数。
  假设为了满足条件2,那么显然在选取了m-1个不同数集之后,剩下那个数集是确定的。
  这样就有P(2^n-1,m-1)这样的数集。
  但这个确定的数集被选取之后可能会不满足条件1。总的有2种情况:
    1.前m-1个集合已满足条件2,使得剩下的数集为空集。(有f[m-1]个这样的集合)
    2.选取的剩下那个数集与之前m-1个的某一个相同。(有f[m-2]*(m-1)*(2^n-1-(m-2))个……)
  所以我们得减去这2种集合的数量。
  递推式即为:
  f[m]=A(2^n-1,m-1)-f[m-1]-f[m-2]*(m-1)*(2^n-1-(m-2))
  最后只要除以m!就行了。
【代码】

 1 #include <iostream>
 2 #include <cstdio>
 3 typedef long long ll;
 4 using namespace std;
 5 const int mo=1e8+7;
 6 const int N=1000005;
 7 int a,n,m,s,f[N],A[N];
 8 int exp(int x,int k,int p)
 9 {
10     int s=1;
11     for (;k;x=(ll)x*x%p,k>>=1)
12         if (k&1)    s=(ll)s*x%p;
13     return s;
14 }
15 int inv(int x,int p)
16 {
17     return exp(x,p-2,p);
18 }
19 void pre()
20 {
21     a=exp(2,n,mo)-1;
22     A[0]=1;
23     for (int i=1;i<=m;++i)
24         A[i]=(ll)A[i-1]*((a-i+1)+mo)%mo;
25 }
26 int main()
27 {
28     cin>>n>>m;    
29     pre();
30     f[0]=1;f[1]=0;
31     for (int i=2;i<=m;++i)    
32         f[i]=((A[i-1]-f[i-1]-(ll)f[i-2]*(i-1)%mo*(a-(i-2)+mo)%mo)%mo+mo)%mo;
33     s=1;        
34     for (int i=1;i<=m;++i)
35         s=(ll)s*i%mo;        
36     cout<<(ll)f[m]*inv(s,mo)%mo<<endl;
37     return 0;
38 }
View Code

 

转载于:https://www.cnblogs.com/Bleacher/p/7688242.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:https://dhexx.cn/news/show-18291.html

如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网进行投诉反馈,一经查实,立即删除!


相关文章:

  • 【BZOJ3379】[Usaco2004 Open]Turning in Homework 交作业 DP
  • MySQL--Centos7下安装5.7.19
  • nodepad代码格式复制到word发布到博客
  • 用SQL语言操作数据
  • 一个很可爱的二次元风格的个人技术博客
  • 接口测试基础——第6篇unittest模块(三)
  • 数据库操作之——约束
  • 驱动程序的同步处理
  • Codeforces Round #442 (Div. 2) D. Olya and Energy Drinks
  • ppt制作元素采集
  • Gradle Maven部署,转化
  • 在学java继承中
  • [争什么! 掺在一起做撒尿牛丸啊! 笨蛋]ASP.NET Core 2.0 + EF6 + Linux +MySql混搭
  • 实现LNMP
  • OSX 鼠标和键盘事件
  • vue2项目使用axios发送请求
  • eclipse 安装maven
  • python之路_数据备份及pymysql模块
  • [软件工程基础]2017.10.30 第三次 Scrum 会议
  • 2017iOS开发最新的打包测试步骤(亲测)
  • 十八、完成登录与注册页面的前端
  • 5_ROS学习
  • 小白错误三——Collider存在,刚体存在情况下,不能触发OnCollisionEnter函数
  • windows service in vs
  • Alpha 冲刺5
  • 机器学习原理视频
  • Ubuntu 下 MySQL 数据自执行备份
  • [HAOI 2012]音量调节
  • day09-线程与进程
  • js中格式化时间戳
  • web项目的开发
  • RedHat 6.4源码方式安装mysql5.5
  • 优客365 v2.9版本 后台存在SQL注入
  • new Option() 创建一个option标签
  • python模块分析之typing(三)
  • 网易校招2018----题目2----相反数
  • Easyui 中获取DataGrid中所有数据
  • day6 break continue for
  • 【网络流24题】魔术球
  • ElasticSearch 核心概念
  • HDU2516 取石子游戏(斐波那契)
  • Angular实现多标签页效果(路由重用)
  • “Hello World!”团队第五周第五次会议
  • Network 第三篇 - STP生成树协议
  • 如何理解linux多用户多任务
  • Learn Python the hard way, ex40 字典,可爱的字典
  • 粗略写了使用GD2制作文字图像demo
  • day6 字典的介绍
  • php过滤数组空值
  • 11/27 记事本