Bzoj4402 Claris的剑
Submit: 270 Solved: 152
Description
Claris想要铸一把剑,这把剑必须符合他的审美,具体来说,我们可以把这把剑的不同地方的宽度看成一个序列,这个序列要满足以下条件:
1.每个元素都是正整数(你的宽度不可能是负数吧)
2.每个元素不能超过M,太宽了如果比Claris身高还高怎么办(你可以认为Claris的身高就是M)
3.相邻两个元素的差的绝对值必须是1(如果是0,则这个地方不是锯齿,杀伤力不够,如果太大,又太丑了)
4.第一个元素的值必须是1(剑尖必须是最窄的地方)
他想知道有多少把长度不超过N(即宽度的序列长度不超过N)的合法的本质不同的剑。
我们认为两把剑本质不同,当且仅当存在至少一个宽度,在两把剑的宽度序列里面出现次数不一样。
比如{1,2,3}和{1,3,2}是本质相同的
{1,2,3}和{1,2,1}则是本质不同的
Input
只有两个整数,表示N,M (数据保证$N,M \leq 2000000$)
Output
只有一个整数,表示答案对$10^9+7$取模的结果
Sample Input
Sample Output
HINT
样例解释
所有本质不同的合法的剑有如下:
{1}
{1,2}
{1,2,3}
{1,2,1}
{1,2,3,2}
{1,2,1,2}
{1,2,3,2,3}
{1,2,3,2,1}
{1,2,1,2,1}
Source
By lyzy
题解传送门 http://blog.csdn.net/sdfzyhx/article/details/72771793
1 #include<iostream> 2 #include<algorithm> 3 #include<cstring> 4 #include<cstdio> 5 #include<cmath> 6 #define LL long long 7 using namespace std; 8 const int mod=1e9+7; 9 const int mxn=2000010; 10 int read(){ 11 int x=0,f=1;char ch=getchar(); 12 while(ch<'0' || ch>'9'){if(ch=='-')f=-1;ch=getchar();} 13 while(ch>='0' && ch<='9'){x=x*10+ch-'0';ch=getchar();} 14 return x*f; 15 } 16 int fac[mxn],inv[mxn]; 17 void init(int n){ 18 int mxn=n+1; 19 fac[0]=fac[1]=1;inv[0]=inv[1]=1; 20 int i,j; 21 for(i=2;i<mxn;i++){ 22 fac[i]=(LL)fac[i-1]*i%mod; 23 inv[i]=((-mod/i*(LL)inv[mod%i])%mod+mod)%mod; 24 } 25 for(i=2;i<mxn;i++)inv[i]=(LL)inv[i-1]*inv[i]%mod; 26 return; 27 } 28 int C(int n,int m){ 29 return (LL)fac[n]*inv[m]%mod*inv[n-m]%mod; 30 } 31 int n,m; 32 int main(){ 33 int i,j; 34 n=read();m=read();init(n); 35 LL ans=0; 36 if(n && m)ans=1; 37 m=min(n,m); 38 for(i=2;i<=m;i++){ 39 ans+=C((n-i)/2+i-1,i-1);if(ans>=mod)ans-=mod; 40 if(n-i-1>=0)ans+=C((n-i-1)/2+i-1,i-1);if(ans>=mod)ans-=mod; 41 } 42 printf("%lld\n",ans); 43 return 0; 44 }
转载于:https://www.cnblogs.com/SilverNebula/p/6909837.html
Bzoj4402 Claris的剑相关推荐
- bzoj4402: Claris的剑
第一眼--DP,然而本质不同... 若每种剑只取字典序最小的,可表示为:1 + 若干个(2 1)+ 2 + 若干个(3 2)+3 +--+k (+k-1) 然后,设剑最大宽度为k,必有序列1--2- ...
- bzoj 4402 Claris的剑
4402: Claris的剑 Time Limit: 10 Sec Memory Limit: 256 MB Submit: 255 Solved: 145 [Submit][Status][Disc ...
- 【BZOJ4402】Claris的剑(组合数学)
传送门 题解: 我们认为两把剑本质不同,当且仅当存在至少一个宽度,在两把剑的宽度序列里面出现次数不一样. 这个定义和我们平时所熟知的本质不同的定义是有较大区别的,这道题中的本质不同需要通过cntcnt ...
- 【BZOJ4402】—Claris的剑(组合数学)
传送门 由于只关注每个数出现了多少次 所以一种情况一定可以表示成1,2,3,4,3,4,3,4--m−1,m1,2,3,4,3,4,3,4--m-1,m1,2,3,4,3,4,3,4--m−1,m 或 ...
- 【BZOJ】4402 Claris的剑
Description Description Claris Claris想要铸一把剑,这把剑必须符合他的审美,具体来说,我们可以把这把剑的不同地方的宽度看成一个序列,这个序列要满足以下条件: 1. ...
- 2017.9.12 claris的剑 失败总结
今天的题怎么都这么难,不是搞常数就是劲逻辑 没想到组合数学学的这么差.连插板法都没有看出来.. 首先两个两个分组(分组的思想很重要) 然后本质不同就利用上了,即选的组数量不同 然后就是枚举所有m,然后 ...
- BZOJ 4402: Claris的剑 (组合数学)
转:ws_yzy的博客 之所以是C(n+m,m)C(n+m,m)C(n+m,m)而不是C(n+m−1,m−1)C(n+m-1,m-1)C(n+m−1,m−1)是因为插数对时不一定全部插满. CODE ...
- bzoj 4402: Claris的剑
要求本质不同,考虑字典序最小的排法 序列是这样的: 1(212121--)2(323232--)3(434343--)-- m 或者 1(212121--)2(323232--)3(434343--) ...
- 京东方剑指物联网领域
(原标题:京东方剑指物联网领域) 信息时报讯(记者 刘莉)在目前正在召开的中国国际高新技术成果交易会上,京东方宣布"开放两端 芯屏气(器)和"的物联网生态理念:芯片是计算.通信.传 ...
最新文章
- 关于ExtJS通过单击左边的treePanel在居中的panel加载页面问题
- 宝塔面板之nginx 配置
- ubuntu系列-很好用的截图工具shutter
- office增加自定义文档模板
- iOS上架app store下载步骤
- 番外9福冈·狂野老司机告诉你如果装AI·1· ——混合现实科幻《地与光》
- 日常一记(7)--excel合并两列数据并删除重复项
- CSS3相比CSS新增哪些功能
- linux usr/bin/和 usr/local/bin之间的关系,什么是软链接?
- 机房电脑怎么批量修改计算机名,批量设置IP地址和计算机名
- 为什么用python写爬虫_老猿为什么写Python爬虫教程
- 优秀课程案例:使用Scratch制作打弹球游戏1-反弹球
- ios使用lua详解
- linux shell 操作二进制文件(xxd、dd)
- 使用jquery实现快递单号查询
- selenium执行js脚本
- 南加州计算机硕士学费,2016年度美国南加州大学排名及研究生学费费用简介.pdf...
- 批量实现excel中的地名转为经纬度
- Java、JSP企业内部邮件系统
- [转] 程序员才懂的58张图片,哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈