HDU 6143 Killer Names(容斥原理)
http://acm.hdu.edu.cn/showproblem.php?pid=6143
题意:
用m个字母去取名字,名字分为前后两部分,各由n个字符组成,前后两部分不能出现相同字符,问合法的组成有多少种。
思路:
$C(m,i)$表示前面用i种字母组成,那么后面的情况就是可以随便用剩下的m-i种字母,总的方法数也很简单,就是$(m-i)^{n}$。
现在问题是怎么计算用i种字母组成n长度的字符串个数?
容斥原理。$i^n-\binom{i}{1}(i-1)^n+\binom{i}{2}(i-2)^n-\binom{i}{3}(i-3)^n+...$
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<sstream>
#include<vector>
#include<stack>
#include<queue>
#include<cmath>
#include<map>
#include<set>
using namespace std;
typedef long long ll;
typedef pair<int,ll> pll;
const int INF = 0x3f3f3f3f;
const int maxn=+;
const int mod=1e9+; int n, m;
ll c[maxn][maxn];
ll mul[maxn][maxn]; void init()
{
memset(c,,sizeof(c));
for(int i=;i<=;i++)
{
c[i][]=;
for(int j=;j<=i;j++) c[i][j]=(c[i-][j-]+c[i-][j])%mod;
}
} ll qpow(ll x, ll n)
{
if(mul[x][n]) return mul[x][n];
ll ans=,aa=x,bb=n;
while(n)
{
if(n&) ans=ans*x%mod;
x=x*x%mod;
n>>=;
}
mul[aa][bb]=ans;
return ans;
} ll calc(ll x)
{
ll tmp=;
for(int i=;i<=x;i++)
{
if(i&) tmp=(tmp-c[x][i]*qpow(x-i,n)%mod+mod)%mod;
else tmp=(tmp+c[x][i]*qpow(x-i,n)%mod)%mod;
}
return tmp;
} int main()
{
//freopen("in.txt","r",stdin);
init();
int T;
scanf("%d",&T);
while(T--)
{
ll ans=;
scanf("%d%d",&n,&m);
for(int i=;i<m && i<=n ;i++)
{
ans=(ans+(c[m][i]*calc(i)%mod)*qpow(m-i,n)%mod)%mod;
}
printf("%lld\n",ans);
}
return ;
}
HDU 6143 Killer Names(容斥原理)的更多相关文章
- HDU 6143 - Killer Names | 2017 Multi-University Training Contest 8
/* HDU 6143 - Killer Names [ DP ] | 2017 Multi-University Training Contest 8 题意: m个字母组成两个长为n的序列,两序列中 ...
- HDU 6143 Killer Names
Killer Names Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tota ...
- HDU 6143 Killer Names DP+快速密
Killer Names Problem Description > Galen Marek, codenamed Starkiller, was a male Human apprentice ...
- 2017多校第8场 HDU 6143 Killer Names 容斥,组合计数
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6143 题意:m种颜色需要为两段长度为n的格子染色,且这两段之间不能出现相同的颜色,问总共有多少种情况. ...
- 2017ACM暑期多校联合训练 - Team 8 1011 HDU 6143 Killer Names (容斥+排列组合,dp+整数快速幂)
题目链接 Problem Description Galen Marek, codenamed Starkiller, was a male Human apprentice of the Sith ...
- hdu 6143: Killer Names (2017 多校第八场 1011)
题目链接 题意,有m种颜色,给2n个位置染色,使左边n个和右边n个没有共同的颜色. 可以先递推求出恰用i种颜色染n个位置的方案数,然后枚举两边的染色数就可以了,代码很简单. #include<b ...
- HDU - 6143 Killer Names(dp记忆化搜索+组合数)
题意:从m种字母中选取字母组成姓名,要求姓和名中不能有相同的字母,姓和名的长度都为n,问能组成几种不同的姓名. 分析: 1.从m种字母中选取i种组成姓,剩下m-i种组成名. 2.i种字母组成长度为n的 ...
- HDU 6143 17多校8 Killer Names(组合数学)
题目传送:Killer Names Problem Description > Galen Marek, codenamed Starkiller, was a male Human appre ...
- hdu6143 Killer Names 容斥+排列组合
/** 题目:hdu6143 Killer Names 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6143 题意:有m种字符(可以不用完),组成两个长度 ...
随机推荐
- UIImage添加滤镜
UIImage *image =[UIImage imageNamed:"]; NSArray *arr = [NSArray arrayWithObjects:@"CISRGBT ...
- 009-jdk1.8版本新特性一-展方法,Lambda表达式,函数式接口、方法引用构造引用
一.JDK1.8 名称:Spider(蜘蛛) 发布日期:2014-03-18 新特性: 1.1.扩展方法[接口的默认方法] Java 8允许我们给接口添加一个非抽象的方法实现,只需要使用 defaul ...
- 微软官方出的各种dll丢失的修复工具
例如 :因为计算机中丢失 api-ms-win-crt-runtime-l1-1-0.dll.尝试重新安装该程序以解决此问题. 软件名称: Visual C++ Redistributable for ...
- vue.js常用的
<input v-model.number="age" type="number"> //自动将用户的输入值转为数值类型 <input v-m ...
- TCP/UDP client/server library for Java, 最好的java语言tcp udp 服务器客户端实现库
这个库andrdoi也可以用,而且是基于类的使用方式: 它支持类似聊天室的功能,即一个人说话,所有客户端都能收到,当然也支持点点通信.它还支持 RMI 的方式调用远程过程. https://githu ...
- pem转cer
openssl x509 -inform pem -in fullchain.pem -outform der -out fullchain.cer
- (转)使用XCode6打开项目以后再用XCode5出现的问题fatal error: malformed or corrupted AST file: 'Unable to load module
使用不同版本的XCode出现的问题: fatal error: malformed or corrupted AST file: 'Unable to load module "/Users ...
- Liferay中request
在liferay中的请求分为renderRequest和actionRequest这两种请求的方式,portletRequest的子类有三个1renderRequest,2EventRequest3C ...
- innob and myisam存储引擎分析
首次啊对比一下两者的区别: MyISAM InnoDB 构成上的区别: 每个MyISAM在磁盘上存储成三个文件.第一个文件的名字以表的名字开始,扩展名指出文件类型. .frm文件存储表定义 ...
- 5select的运用
四.select的运用 --汇总函数 max()最大值,min()最小值,avg()平均值select max(age),min(age),avg(age) from tablename; --算出表 ...