集合计数 (容斥原理)

心路:

{

想了个思路打出来硬干掉了样例,然后发现是错的....
当时直接崩了...烦躁滴很
...其实这个思路和题解大方向上是一样的,想到了用至少含k个的方案数减去含k+1个的加上k+2的。。。

然后再想怎么求至少含k个的方案数想到了让集合含这k个数然后随机组就行,但没有想出来怎么求含这k个数的集合数,而且就算求出来发现不能直接对一种情况乘,有重复计算的...

想到这...再想...再想...放弃->颓题解。T_T
颓完题解,发现我是把题目信息忽略了...2^n没怎么用上;

}

题解

{

  往容斥上想,容斥的一般思路就是先找出单一满足的,把问题简单化(让其限制变小),再逐步用容斥求解。

这题总思路就是先找至少含k个的(限制变少,能够推式),再容斥。

再求至少含k个的时候,容易发现想要交出含这k个的,让集合含这k个数在随机组合一定能交出来.

问题来了:怎么求含特定k个数的集合总数呢?

把这k个数提取出来剩下的数随机组,能够组成的集合在把k个数补回去不就是答案吗,所以有2^(n-k)种(含空集,实际指的是正好只含这K个数的集合),在让这几个集合随机组一定是满足能交成至少含k个数的方案。注意空集不是,所以是2^( 2^(n-k) )-1种。

举个栗子:数据是4 2

以1,3为例,把1 3提取,剩下的数所组是{2},{4},{2,4},{空},其实就是{1,2,3},{1,3,4},{1,2,3,4},{1,3};这四个集合在随机组成的方案中,空集相当于哪个集合都没取交集为空所以不符合。

求出1,3后乘上C(n,2)不就是交出来至少含k个的方案数了吗?显然不是,,,有重复的啊

比如1,3会求到{1,2,3,4}交{1,3,4},而1,4..3,4也会(当时我就这崩了...)

看重复的有多少啊->对于求k个时交出来是k+1个的会算C(k+1,k)遍以此类推..所以在容斥时只要把重复的倍数减去就行。

设f(k)=C(n,k)*(  2^( 2^(n-k) )-1 ),

答案就是f(k)*C(K,K)-C(K+1,K)*f(k+1)+C(k+2,k)*f(k+2)...;

预处理阶乘和逆元,2^...这里也要预处理不然会WA(我也不知道为哈用快速幂求出的大数据就是不对)。

2^(2^(n-k))=( 2^(2^(n-k-1)) )^2,利用这个性质倒推预处理出来就行了

f(k)Ckkf(k+1)Ckk+1+f(k+2)Ckk+2...f(n)Ckn

}

#include<cstdio>
#include<iostream>
using namespace std;
#define ll long long
const int mod=1e9+7;
const int maxn=1000010;
int n,k;
ll ans,f[maxn];
ll fac[maxn],inv[maxn],qtwo[maxn];
ll qpow(ll a,int b)
{ll ans=1;while(b){if(b&1) ans=ans*a%mod;b>>=1;a=a*a%mod;}return ans;
}
void init()
{fac[0]=1;for(int i=1;i<=n;i++) fac[i]=fac[i-1]*i%mod;inv[n]=qpow(fac[n],mod-2);for(int i=n-1;i>=0;i--) inv[i]=inv[i+1]*(i+1)%mod;qtwo[n]=2;for(int i=n-1;i>=0;i--) qtwo[i]=qtwo[i+1]*qtwo[i+1]%mod;
}
void F(int x)
{ll turn,kp;turn=qtwo[x]-1;f[x]=fac[n]*inv[x]%mod*inv[n-x]%mod*turn%mod;
}
void rongchi()
{for(int i=k;i<=n;i+=2) ans=(ans+ fac[i]*inv[k]%mod*inv[i-k]%mod*f[i]%mod )%mod;for(int i=k+1;i<=n;i+=2) ans=(ans+mod- fac[i]*inv[k]%mod*inv[i-k]%mod*f[i]%mod )%mod;
}
int main()
{
//freopen("c.out","w",stdout);scanf("%d%d",&n,&k);init();for(int i=k;i<=n;i++) F(i);rongchi();printf("%lld",ans);
}
View Code

 

转载于:https://www.cnblogs.com/three-D/p/11138164.html

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[html] 如何禁止手机端页面缩放?

[html] 如何禁止手机端页面缩放&#xff1f; <meta name"viewport" content"user-scalableno">个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前…

oracle 执行计划 ppt,oracle查看执行计划的方法

查看执行计划的方法Explain Plan For SQL不实际执行SQL语句&#xff0c;生成的计划未必是真实执行的计划必须要有plan_tableSQLPLUS AUTOTRACE除set autotrace traceonly explain外均实际执行SQL&#xff0c;但仍未必是真实计划必须要有plan_tableSQL TRACE需要启用10046戒者SQ…

《TCP/IP Sockets 编程》笔记5

第5章 发送和接收数据 There is nomagic: any programs that exchange information must agree on how that information will be encoded—represented as a sequence of bits—as well as which program sends what information when, and how the information received affe…

codeforces-1176 (div3)

打div3翻车了 A.第一个操作是除二&#xff0c;第二个操作视为两下操作之后除三&#xff0c;第三个操作视为三下操作之后除五&#xff0c;直接计算贡献 #include <map> #include <set> #include <ctime> #include <cmath> #include <queue> #incl…

oracle的工具cmd,数据库命令行工具DBCLI

转换日期有点问题。column trans_low format a20column trans_high format a20column data_default format a20SELECT--owner,-- table_name,column_name,data_type,data_length,nullable,num_distinct,density,sample_size,CASEWHEN data_type IN (CHAR, VARCHAR2)THE…

[html] 你能否画出一个0.5px的直线?

[html] 你能否画出一个0.5px的直线&#xff1f; 通过scale(0.5)来实现个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

VS2008 正式版 下载+ KEY 注册码

微软官方下载 http://www.microsoft.com/downloads/details.aspx?displaylangzh-cn&FamilyIDd95598d7-aa6e-4f24-82e3-81570c5384cb 中文 MSDN Library for Visual Studio 2008 http://www.microsoft.com/downloads/details.aspx?displaylangzh-cn&FamilyID6ff3bc60-…

微软CRM 2011 Beta 新功能之二:不同组织不同基本语言

微软CRM 4.0就开始提供对多语言的支持&#xff0c;在安装微软CRM 4.0时需要选择不同语言的安装程序&#xff0c;安装完成后该部署服务器上默认组织以及任何新建组织的基本语言跟安装程序的语言一致。虽然我们可以在服务器上安装多个语言包&#xff0c;使用户可以选择要使用的语…

php教育项目,六星教育:如何在PHP项目实战中取胜,获得腾讯等大厂的offer

原标题&#xff1a;六星教育&#xff1a;如何在PHP项目实战中取胜&#xff0c;获得腾讯等大厂的offer我们在进行PHP学习的时候&#xff0c;总会强调实战的重要性。事实也是如此&#xff0c;如果光知道理论知识&#xff0c;而缺乏实际项目的参与与运作&#xff0c;就会变得纸上谈…

[html] 制作一个页面时,需要兼容PC端和手机端,你是要分别做两个页面还是只做一个页面自适应?为什么?说说你的理由

[html] 制作一个页面时&#xff0c;需要兼容PC端和手机端&#xff0c;你是要分别做两个页面还是只做一个页面自适应&#xff1f;为什么&#xff1f;说说你的理由 两个页面 pc端布局和交互行为跟移动端不一样&#xff0c; 两个页面反而更好维护个人简介 我是歌谣&#xff0c;欢…

Silverlight学习笔记(一)——Silverlight够酷吗?

2007年底&#xff0c;微软推出了Silverlight1.0&#xff0c;在RIA领域小试牛刀。如今&#xff0c;Silverlight的成长速度已经超过了人们当初的想象。其一体化的编程方式、与JavaScript和Asp.Net的无缝集成功能&#xff0c;强大的应用层美工、设计工具&#xff0c;已经让众多开发…

方法有多少个参数才算多?

小弟有这样一个方法&#xff0c;按页大小和页索引查询产品&#xff0c;如下。 ///<summary>///获取产品///</summary>///<param name"manufacturerID">厂商ID&#xff0c;为null时不做查询条件。</param>///<param name"categoryID&…

[html] 如何实现页面背景图固定不动,不跟随滚动条滚动?

[html] 如何实现页面背景图固定不动&#xff0c;不跟随滚动条滚动&#xff1f; background-attachment: fixed个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

oracle数据库纵表设计,oracle 数据库设计-数据库表设计

在数据库设计中&#xff0c;我的工作中经常会分析怎样商业逻辑中的表格如何设计。再设计表的关系之前 需要先了解关系型数据库特点1关系型数据库&#xff0c;是指采用了关系模型来组织数据的数据库&#xff1b;2、关系型数据库的最大特点就是事务的一致性&#xff1b;3、简单来…

汇编语言复习摘要二——寄存器

CPU中的主要部件是寄存器&#xff0c;寄存器是CPU中程序员可以用指令来读写的部件。通过改变各种寄存器中的内容来实现对CPU的控制。8086CPU有14个寄存器&#xff0c;这里不一一列举。 1. 通用寄存器&#xff1a;8086CPU的所有寄存器都是16位的&#xff0c;也就是可以存放两个字…

ListString^^ 引用空间

莫名其妙报错 需要在.h和.cpp文件中都引用&#xff1a; using namespace System::Collections;using namespace System::Collections::Generic;转载于:https://www.cnblogs.com/dot-dot-123/p/3481717.html

[html] 如何实现默认显示git的第一帧图片,当鼠标经过时,播放完整的gif动画

[html] 如何实现默认显示git的第一帧图片&#xff0c;当鼠标经过时&#xff0c;播放完整的gif动画 准备一个静态第一帧的 img 图片&#xff0c;和gif完整图片&#xff0c;来回切换&#xff0c;就可以完成效果个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃…

u盘运行linux系统卡住了,从U盘运行Linux操作系统的三种方法

从U盘运行Linux操作系统的三种方法你或许听说过在U盘上运行live Linux操作系统&#xff0c;但你知不知道可以永久的保存运行时的数据&#xff0c;或者直接将Linux安装到U盘&#xff1f;本文将介绍把Linux装进口袋(U盘)的三种方法&#xff0c;挑一种你最喜欢的方法吧&#xff01…

全屏模式

<mx:Button label"全屏" click"stage.displayState StageDisplayState.FULL_SCREEN" /> <mx:Button label"窗口" click"stage.displayState StageDisplayState.NORMAL" /> <mx:Button label"全屏交互" cli…

[html] html页面中如何实现gif图片重新播放?

[html] html页面中如何实现gif图片重新播放&#xff1f; 因为浏览器会缓存图片&#xff0c;所以对于一次性gif如果不做处理的话&#xff0c;只会播放一次。如果需要重新播放gif&#xff0c;重新设置下img标签的src属性即可个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前…