Partition HDU - 4602 (不知道为什么被放在了FFT的题单里)
题目链接:Vjudge 传送门
相当于把nnn个点分隔为若干块,求所有方案中大小为kkk的块数量
我们把大小为kkk的块,即使在同一种分隔方案中的块
单独考虑,它可能出现的位置是在nnn个点的首、尾、中
- 出现在首尾时,有222种情况,此时剩下的点有(n−k−1)(n-k-1)(n−k−1)个间隔,每个间隔可分可不分,所以方案数为2⋅2(n−k−1)2\cdot 2^{(n-k-1)}2⋅2(n−k−1)
- 出现在中间时,有(n−k−1)(n-k-1)(n−k−1)种情况,此时剩下的点有(n−k−2)(n-k-2)(n−k−2)个间隔,每个间隔可分可不分,所以方案数为(n−k−1)⋅2(n−k−2)(n-k-1)\cdot 2^{(n-k-2)}(n−k−1)⋅2(n−k−2)
加起来即为(n−k+1)⋅2(n−k−2)(n-k+1)\cdot2^{(n-k-2)}(n−k+1)⋅2(n−k−2)
注意此处要特判3种情况
(1)n<k
(2)n=k
(3)n-k-2=-1
n−k−2n-k-2n−k−2若更小,如为−2-2−2,则nnn已经等于kkk了
AC code
#include <cstdio>
typedef long long LL;
const int mod = 1e9 + 7;
inline int qmul(int a, int b)
{
int ret = 1;
while(b)
{
if(b & 1) ret = (LL)ret * a % mod;
a = (LL)a * a % mod; b >>= 1;
}
return ret;
}
int main ()
{
int T, n, k;
scanf("%d", &T);
while(T--)
{
scanf("%d%d", &n, &k);
if(n < k) puts("0");
else if(n == k) puts("1");
else if(n == k+1) puts("2");
else
{
printf("%lld\n", (LL)(n-k+3) * qmul(2, n-k-2) % mod);
}
}
}
Partition HDU - 4602 (不知道为什么被放在了FFT的题单里)的更多相关文章
- hdu 5288||2015多校联合第一场1001题
pid=5288">http://acm.hdu.edu.cn/showproblem.php?pid=5288 Problem Description OO has got a ar ...
- CSP-J2019 把8个同样的球放在同样的5个袋子里,允许有的袋子空着不放,问共有多少种不同的分法?
把8个同样的球放在同样的5个袋子里,允许有的袋子空着不放,问共有多少种不同的分法? 提示:如果8个球都放在一个袋子里,无论是放哪个袋子,都只算同一种分法. 解析: 把问题合成,先思索5个袋子都不空的状 ...
- hdu 4602 Partition
http://acm.hdu.edu.cn/showproblem.php?pid=4602 输入 n 和 k 首先 f(n)中k的个数 等于 f(n-1) 中 k-1的个数 最终等于 f(n-k+1 ...
- hdu 4602 Partition 数学(组合-隔板法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4602 我们可以特判出n<= k的情况. 对于1<= k<n,我们可以等效为n个点排成 ...
- hdu 4602 Partition (概率方法)
Partition Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- HDU 4602 Partition (矩阵乘法)
Partition Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- hdu 4602 Partition 矩阵快速幂
Partition Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Proble ...
- 【HDU 4602】Partition
题意 给你一个数n,把它写成几个正整数相加的形式,即把n拆开成若干段,把所有可能的式子里正整数 k 出现的次数取模是多少. 分析 特判 k>=n 的情况. k<n时:问题相当于n个点排一行 ...
- hdu 4602 Partition(快速幂)
推公式+快速幂 公式有很多形式,可以写矩阵 1.前n-1项和的两倍+2的(n-2)次方,这个写不出啥 2.递推式:f(n)=2*f(n-1)+2的(n-3)次方 3.公式:2的(n-k-2)次方*(n ...
随机推荐
- SQL Server 数据库启动过程(用户数据库加载过程的疑难杂症)
前言 本篇主要是上一篇文章的补充篇,上一篇我们介绍了SQL Server服务启动过程所遇到的一些问题和解决方法,可点击查看,我们此篇主要介绍的是SQL Server启动过程中关于用户数据库加载的流程, ...
- shoshana-技术文集
20190422 全球最厉害的 14 位程序员,请收下我的膝 20190423 观察者模式(Observer)和发布(Publish/订阅模式(Subscribe) 2019042 ...
- Delphi阿里云短信【支持短信发送、短信批量发送和查询短信发送记录】
作者QQ:(648437169) 点击下载➨Delphi阿里云短信 阿里云api文档 [Delphi 阿里云短信]是最新的阿里云短信接口,不是阿里大于短信接口,支持SendSm ...
- 2. 运行Spark Streaming
2.1 IDEA编写程序 Pom.xml加入以下依赖: <dependency> <groupId>org.apache.spark</groupId> <a ...
- Jenkins+harbor+gitlab+k8s 部署maven项目
一.概述 maven项目部署流程图如下: 环境介绍 操作系统 ip 角色 版本 ubuntu-16.04.4-server-amd64 192.168.10.122 Jenkins+harbor Je ...
- .NET Core入门
.Net core MVC 如何使用 .NET Core,最基本的入行,很多博客以及官网都有的太多太多的例子,但是大部分没有人做到了真的让一个小白一步一步的去学, 我第一次接触的时 ...
- OpenSSL X509 Funtion
OpenSSL X509 Funtion 来源:https://blog.csdn.net/wanjie518/article/details/6570141 现有的证书大都采用X509规范, 主要同 ...
- Linux中解压、压缩 ZIP文件
解压 unzip -o -d /home/v-gazh myfile.zip # 把myfile.zip文件解压到 /home/v-gazh/ # -o:不提示的情况下覆盖文件: # -d:-d /h ...
- Python进阶(十六)----面向对象之~封装,多态,鸭子模型,super原理(单继承原理,多继承原理)
Python进阶(十六)----面向对象之~封装,多态,鸭子模型,super原理(单继承原理,多继承原理) 一丶封装 , 多态 封装: 将一些东西封装到一个地方,你还可以取出来( ...
- api封装
const sql={ insert: function(collection,insertData){ return new Promise(function(resolve,reject){ co ...