hdu 6143
题意:有m种字符,要求构造两段长度为n的字符串,其中这两段不能有相同的字符
枚举左边选了i种字符,右边可以选1,2....min(n,m-i)种字符
这样就把问题转化为用k种字符构造n长度的字符串的种类有多少种
容斥:单独考虑每一位上的字符都有k种选择,k^n,但会有不够k种的情况,所以要减去只有k-1种颜色,只有k-2种颜色。。。。的情况
这里是用容斥处理一下
好,上面都是copy过来的东西,现在是自己写的了。。 首先,这道题目比赛的时候没写出来,虽然当时想到了用容斥处理,但是对容斥的情况没有理解清楚。
复习一下容斥,写容斥的时候,我们先要理出最小集合,这些集合的并能够得到我们想到的结果;在在就是集合的交有了一个新的认识,以前的理解太肤浅了。
对于这道题目,我们定理f(x)为x个字母全部用上的方案数,利用容斥,一般要考虑逆问题。f(x)的逆问题———k个元素中,至少有一个字母没用上的方案数。
那么最小集合为有一个字母没用上,其他字母可用可不用的情况,之后的容斥就可以了。
附上一个骚气的代码(自己写的老是超时,有点烦,贴了个其他大佬的):
#include <cstdio>
#include <iostream>
typedef long long LL;
using namespace std;
const int maxn =;
const int mod = 1e9+; LL res[maxn];
LL C[maxn][maxn];
LL mul[maxn][maxn]; LL mult(LL a,LL b)
{
if(mul[a][b])return mul[a][b]; // 这个记录的方式也是。。。 长见识了
LL ans=,aa=a,bb=b;
a%=mod;
while(b)
{
if(b&)ans=(ans*a)%mod;
a=(a*a)%mod;
b>>=;
}
mul[aa][bb]=ans;
return ans;
} void init()
{
C[][]=;
for(int i=; i<maxn; i++)
for(int j=; j<=i; j++)
C[i][j]=(C[i-][j-]+C[i-][j])%mod;
} LL getget(LL n,LL m)
{
LL cnt=;
for(int k=; k<=m; k++)
{
if(k&)cnt=(cnt-C[m][k]*mult(m-k,n)%mod)%mod;
else cnt=(cnt+C[m][k]*mult(m-k,n)%mod+mod)%mod;
}
return cnt;
} template <class T>
inline void scan_d(T &ret)
{
char c;
ret = ;
while ((c = getchar()) < '' || c > '');
while (c >= '' && c <= '')
ret = ret * + (c - ''), c = getchar();
} void Out(LL a)
{
if (a < )
{
putchar('-');
a = -a;
}
if (a >= )
Out(a / );
putchar(a % + '');
} int main()
{
init();
int T;
scan_d(T);
while(T--)
{
memset(res,,sizeof(res));
int n,m;
LL ans=;
scan_d(n);
scan_d(m);
for(int i=; i<m; i++)
res[i]=getget(n,i);
for(int i=; i<m; i++)
for(int j=i; j<=m-i; j++)// 这里枚举两个数的时候,采用有序枚举的形式,降低一点复杂度,还可以去重。
{
LL aa=C[m][i]*res[i]%mod;
LL bb=C[m-i][j]*res[j]%mod;
LL cnt = (aa*bb)%mod;
if(i!=j) cnt = (cnt+cnt)%mod;
ans=(cnt+ans)%mod;
}
Out(ans);
putchar('\n');
}
return ;
}
hdu 6143的更多相关文章
- 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(容斥原理)
http://acm.hdu.edu.cn/showproblem.php?pid=6143 题意: 用m个字母去取名字,名字分为前后两部分,各由n个字符组成,前后两部分不能出现相同字符,问合法的组成 ...
- 2017多校第8场 HDU 6143 Killer Names 容斥,组合计数
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6143 题意: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 17多校8 Killer Names(组合数学)
题目传送:Killer Names Problem Description > Galen Marek, codenamed Starkiller, was a male Human appre ...
- 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 DP+快速密
Killer Names Problem Description > Galen Marek, codenamed Starkiller, was a male Human apprentice ...
- hdu 6143第二类striling
题意:有m种字符,要求构造两段长度为n的字符串,其中这两段不能有相同的字符 枚举左边选了i种字符,右边可以选1,2....min(n,m-i)种字符 这样就把问题转化为用k种字符构造n长度的字符串的种 ...
- hdu 6143: Killer Names (2017 多校第八场 1011)
题目链接 题意,有m种颜色,给2n个位置染色,使左边n个和右边n个没有共同的颜色. 可以先递推求出恰用i种颜色染n个位置的方案数,然后枚举两边的染色数就可以了,代码很简单. #include<b ...
随机推荐
- golang 不足
滴滴出行技术总监:关于技术选型的那些事儿 原创: 杜欢 InfoQ 2017-02-26 https://mp.weixin.qq.com/s/6EtLzMhdtQijRA7Xrn_pTg ...
- 阶段5 3.微服务项目【学成在线】_day17 用户认证 Zuul_12-用户退出-服务端
实现退出 用户退出要以下动作: 1.删除redis中的token 2.删除cookie中的token controller内定义 spring securety config内放行 对这个url放行 ...
- List根据多个字段分组
List<ClassEntity> distinctClass = classEntities.stream().collect(Collectors.collectingAndThen( ...
- 处理线上CPU负载过高的故障现象
如何处理线上CPU100%的故障现象 处理流程: 1.登陆线上机器top命令,查看耗费cpu的进程号,举例来说发现进程24008持续耗费资源 2.top -Hp 24008去查看持续耗费cpu的线程号 ...
- delphi中TTreeView的使用方法
[学习万一老师博客摘要] TTreeView 与两个重要的类相关:TTreeNodes.TTreeNode . TTreeNodes即是TTreeView 的Items属性,TTreeNodes是TT ...
- laravel构建联合查询
参考:http://laravelacademy.org/post/126.html DB门面可以指定不同的数据库连接(通过connection方法) /** * @param $login_uid ...
- iOS-UIButton分类扩展(封装)
UIButton+BackgroundColor.h #import <UIKit/UIKit.h> @interface UIButton (BackgroundColor) - (vo ...
- MySQL数据同步交换
一.为了解决数据同步汇聚,数据分发,数据转换,数据维护等需求,TreeSoft将复杂的网状的同步链路变成了星型数据链路. TreeSoft作为中间传输载体负责连接各种数据源,为各种异构数据库之 ...
- react-developer-tools
链接: https://pan.baidu.com/s/1g7kLC3fF-u-lQySLqpivog 提取码: 92j9 复制这段内容后打开百度网盘手机App,操作更方便哦 安装:1.点击--> ...
- EM算法之不同的推导方法和自己的理解
EM算法之不同的推导方法和自己的理解 一.前言 EM算法主要针对概率生成模型解决具有隐变量的混合模型的参数估计问题. 对于简单的模型,根据极大似然估计的方法可以直接得到解析解:可以在具有隐变量的复杂模 ...