博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【HDU 4602】Partition
阅读量:6343 次
发布时间:2019-06-22

本文共 688 字,大约阅读时间需要 2 分钟。

给你一个数n,把它写成几个正整数相加的形式,即把n拆开成若干段,把所有可能的式子里正整数 k 出现的次数取模是多少。

分析

特判 k>=n 的情况。

k<n时:问题相当于n个点排一行,选其中连续的k个点,其他点的间隔情况有多少种。

n个点原来有n-1个两两之间的间隔,当n-k>1时,如果k个点不包含端点,那么剩下的间隔就是:n-1 -(k+1)=n-k-2。此时每个间隔,就有隔或者不隔2种情况,选这k个点的方法又有n-k-1种,所以共有2的n-k-2次方 * (n-k-1)种间隔方案。

如果包含端点,剩下的间隔就是:n-1 -k。因为两个端点,所以有2*(2的n-1-k次方)种间隔方案。

所以总共有2n-k-2*(n-1-k)+2*2n-1-k=(n-3-k)*2n-k-2种方案。

注意到如果n-k=1,那么只有包含端点的情况,答案就是2,故也进行特判。

然后用快速幂取模就可以啦。

代码

#include
#define ll long longll m=1e9+7;ll qpow(int b){ ll a=2,ans=1; while(b) { if(b&1)ans=ans*a%m; a=a*a%m; b>>=1; } return ans;}int main(){ ll t,n,k; scanf("%lld",&t); while(t--) { scanf("%lld%lld",&n,&k); if(n

 

转载地址:http://tskla.baihongyu.com/

你可能感兴趣的文章
shell 简单计算器
查看>>
浅析Python进行接口自动化
查看>>
windows及linux环境下永久修改pip镜像源的方法
查看>>
表格表单及样式重置、特性
查看>>
八月个人考核
查看>>
linux网卡绑定
查看>>
Oracle技术之缺少log_archive_config导致归档路径被禁用
查看>>
Oracle 临时表之临时表的应用问题
查看>>
Linux之进程查看与管理
查看>>
碟中谍:完成任务机房是核心
查看>>
戴尔联合微软开发私有云入门级系统
查看>>
图片轮播滚动
查看>>
关于客户端与服务端时区不同导致客户端上的时间不准问题的解决方案
查看>>
基于Windows AD的单点登录系统(二)
查看>>
第17章 重新登录
查看>>
java 表现层:jsp、freemarker、velocity
查看>>
内置函数, 递归, 二分法
查看>>
java jni和android java ndk
查看>>
Kotlin技术分享:中缀调用、解构声明
查看>>
property函数
查看>>