题意:有m种字符,要求构造两段长度为n的字符串,其中这两段不能有相同的字符

枚举左边选了i种字符,右边可以选1,2....min(n,m-i)种字符

这样就把问题转化为用k种字符构造n长度的字符串的种类有多少种。

第二类stirling数是指将基数为n的集合分为恰好k个(不做区分)非空集合的方法数。这里我们把长度作为基数,把可提供的颜色作为要划分的集合数。由于这里每个集合要唯一区分,所以要乘上k!。之后枚举一下就可以了。

#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
typedef long long ll;
const int mo = 1e9 + ;
long long s[][],f[];
long long myc[][];
void init()
{
myc[][]=;
myc[][]=myc[][]=;
for(int i=;i<=;i++)
{
myc[i][]=;
myc[i][i] = ;
for(int j=;j<i;j++)
myc[i][j]=(myc[i-][j]+myc[i-][j-])%mo;//组合数
}
f[]=;
for(int i=;i<=;i++)
f[i]=(f[i-]*i)%mo;//阶乘
for(int i=;i<=;i++)
s[i][i]=,s[i][]=;
for(int i=;i<=;i++)
{
for(int j=;j<=i-;j++)
{
s[i][j]=(j*s[i-][j]+s[i-][j-])%mo;//斯特林数
}
}
return ;
}
int main()
{
int T,n,m,i,j;
cin>>T;
init();
while(T--)
{
cin>>n>>m;
long long ans=;
for(i=;i<=min(m-,n);i++)
{
long long now=(((myc[m][i]*s[n][i])%mo)*f[i])%mo;
int up=min(n,m-i);
for(j=;j<=up;j++)
{
ans=(ans+(f[j]*now)%mo*((myc[m-i][j]*s[n][j])%mo))%mo;
}
}
cout<<ans<<endl;
}
return ;
}

hdu 6143第二类striling的更多相关文章

  1. HDU 6143 - Killer Names | 2017 Multi-University Training Contest 8

    /* HDU 6143 - Killer Names [ DP ] | 2017 Multi-University Training Contest 8 题意: m个字母组成两个长为n的序列,两序列中 ...

  2. HDU 6143 Killer Names(容斥原理)

    http://acm.hdu.edu.cn/showproblem.php?pid=6143 题意: 用m个字母去取名字,名字分为前后两部分,各由n个字符组成,前后两部分不能出现相同字符,问合法的组成 ...

  3. 2017多校第8场 HDU 6143 Killer Names 容斥,组合计数

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6143 题意:m种颜色需要为两段长度为n的格子染色,且这两段之间不能出现相同的颜色,问总共有多少种情况. ...

  4. HDU 6143 Killer Names

    Killer Names Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tota ...

  5. HDU 6143 17多校8 Killer Names(组合数学)

    题目传送:Killer Names Problem Description > Galen Marek, codenamed Starkiller, was a male Human appre ...

  6. 2017ACM暑期多校联合训练 - Team 8 1011 HDU 6143 Killer Names (容斥+排列组合,dp+整数快速幂)

    题目链接 Problem Description Galen Marek, codenamed Starkiller, was a male Human apprentice of the Sith ...

  7. HDU 6143 Killer Names DP+快速密

    Killer Names Problem Description > Galen Marek, codenamed Starkiller, was a male Human apprentice ...

  8. hdu 6143

    题意:有m种字符,要求构造两段长度为n的字符串,其中这两段不能有相同的字符 枚举左边选了i种字符,右边可以选1,2....min(n,m-i)种字符 这样就把问题转化为用k种字符构造n长度的字符串的种 ...

  9. hdu 6143: Killer Names (2017 多校第八场 1011)

    题目链接 题意,有m种颜色,给2n个位置染色,使左边n个和右边n个没有共同的颜色. 可以先递推求出恰用i种颜色染n个位置的方案数,然后枚举两边的染色数就可以了,代码很简单. #include<b ...

随机推荐

  1. Swagger 慢

    Swagger 慢 - 国内版 Binghttps://cn.bing.com/search?FORM=U227DF&PC=U227&q=Swagger+%E6%85%A2 rest框 ...

  2. C++中的break、continue、goto语句

    break.continue.goto break用于提前结束循环.只能打断一层循环.是把一层循环全部结束掉.continue则是提前结束循环内单次,继续循环下一步.

  3. python制作简单excel统计报表3之将mysql数据库中的数据导入excel模板并生成统计图

    python制作简单excel统计报表3之将mysql数据库中的数据导入excel模板并生成统计图 # coding=utf-8 from openpyxl import load_workbook ...

  4. vue plupload 的使用

    1.  首选npm安装plupload 2. 阿里云OSS PHP 安全上传 <template> <div class="imgUpload"> aaa ...

  5. JS 数字相加出现多个小数的问题

    今天在页面上用到了js进行小数相加119.01+0.01,结果大家都知道应该是:119.02的,然而结果是119..0200000…. ,莫名其妙的,还以为是我写的程序有问题,后来查了下才知道这是ja ...

  6. pcm、wav、amr说明

    wav比pcm多44个字节(在文件头位置多)

  7. 使用idea创建简单的webservice服务

     New project: 生成HelloWorld.wsdl: 配置好tomcat后还需要加入 Axis 的库: 启动后,访问http://localhost:8080/services: 点击He ...

  8. Jmeter性能测试实战教程系列-搭建分布式性能测试环境(五)

    Jmeter 是java 应用,对于CPU和内存的消耗比较大,因此,当需要模拟数以千计的并发用户时,使用单台机器模拟所有的并发用户就有些力不从心,甚至会引起JAVA内存溢出错误.为了让jmeter工具 ...

  9. top显示命令详解+top命令使用

    http://blog.csdn.net/u014226549/article/details/22041289

  10. Amazon MWS Scratchpad

    https://mws.amazonservices.com/scratchpad/index.html Use this page to test Amazon MWS API request an ...