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种字符(可以不用完),组成两个长度 ...
随机推荐
- MyEclipse安装及破解步骤
MyEclipse2013 (32+64)下载地址(建议使用迅雷下载)http://downloads.myeclipseide.com/downloads/products/eworkbench/2 ...
- rplidar跑cartographer
一.Cartographer编译 cartographer依赖的大型第三方库很少,编译时基本没有依赖项问题,基本按照官方文档的步骤来,略作修改.使用的环境是Ubuntu16.04+ROS Kineti ...
- golang语言中的context详解,Go Concurrency Patterns: Context
https://blog.golang.org/context Introduction In Go servers, each incoming request is handled in its ...
- OS-96
print('os.access(path,mode):检验权限模式----------------------------------------------------------------') ...
- [LeetCode]94, 144, 145 Binary Tree InOrder, PreOrder, PostOrder Traversal_Medium
Given a binary tree, return the inorder, preorder, postorder traversal of its nodes' values. Example ...
- Sublime text 3搭建Python-Anaconda开发环境
网络上的教程各种各样,大同小异.自己安装时还是出了些问题,因此总结一篇博文. Sublime Text 是一款轻量级跨平台的文本编辑器,可通过包(Package)扩充自身功能. 有很多搭建python ...
- 代码编译 Compile、Make、Build 的区别
代码编译 Compile.Make.Build 的区别 https://blog.csdn.net/fanzheng220112583/article/details/7780250 VC++6.0中 ...
- JS参差不齐的数组
<html><head> <title>参差不齐的数组</title> <meta charset="utf-8"> & ...
- windows 7 中使用命令行创建WiFi热点
就是让你的电脑可以作为WiFi热点,然后供其它支持WiFi的设备上网 首先你的电脑中必须有正常使用的无线网卡 幺幺幺切克闹,开始命令吧,(注:命令是在windows中的命令提示符中运行的) 禁用承载网 ...
- nginx之gzlib压缩,expires缓存
gzip压缩网页内容的压缩编码与传输速度优化我们观察news.163.com的头信息请求:Accept-Encoding:gzip,deflate,sdch响应:Content-Encoding:gz ...