洛谷【P5004 专心OI - 跳房子】 题解
题目链接
https://www.luogu.org/problem/P5004
洛谷 P5004 专心OI - 跳房子
Imakf有一天参加了PINO 2017 PJ组,他突然看见最后一道题
他十分蒟蒻,写不出来
而如今他还是一个蒟蒻,他又看见一道题
他还是写不出来,于是便来请教您
题目描述
您有NN个格子,排成一行,从左往右编号为1,2,...,N1,2,...,N。您站在11号格子的左边,开始从左往右跳,跳到NN号格子右侧为止。由于您是一位成功的OIerOIer,您自然长得很胖,但您的力量也非常大!这使得您跳一次,当前格子到目标格子中间必须至少空出来MM格,但您可以跳无数格远!
您认为这么跳太没意思了,于是便想计算出有多少种方案可以跳完全程。由于方案可能过多,您会输出方案数量模(10^9+7)(109+7)的值
方案指经过格子编号的顺序不同,具体可见说明
题目简化一下……把NN个无色格子排成一行,可以把某些格子染成黑色,但两个黑色格子之间必须至少有MM个无色格子,求方案数
输入格式
第一行 N,MN,M
输出格式
跳完全程的方案模(10^9+7)(109+7)
一道高中的排列组合问题
原理:
考虑黑色格子最多的情况:最左侧是黑色,然后每隔M个格子都是黑色,这种情况下的黑色格子的总数为:(N-1)/(M+1)+1 这种排列情况最右侧的无色格子为(N-1)%(M+1),由于黑色格子间隔最少是M,并且此种情况所有黑色格子间隔都是M,所以黑色格子中间的格子是不能动的。现在把最右侧的无色格子看成是活动的,那么这些格子放置到任何位置都能满足要求,又因为(N-1)/(M+1)+1个黑色格子将N分割为了(N-1)/(M+1)+2个区域,所以黑色格子最多时的方案问题就转化为了高中的排列组合问题:(N-1)%(M+1)个小球放入(N-1)/(M+1)+2个盒子,小球相同,盒子不同,盒子里的小球可以为0。所以这种情况的方案数为C[((N-1)%(M+1)+(N-1)/(M+1)+1),(N-1)/(M+1)+1)。根据这种原理就可以求得所有的方案数了。代码如下:
#include<stdio.h> long long factorial(int m, int n)
{
int i,j;
long long ans = 1;
if(m < n-m) m = n-m;
for(i = m+1; i <= n; i++) ans *= i;
for(j = 1; j <= n - m; j++) ans /= j;
return ans;
}
int main()
{
int N,M,k,a,b,c=0;
long long d=0;
scanf("%d%d",&N,&M);
k=(N-1)/(M+1)+1;
a=(N-1)%(M+1);
for(b=k;b>1;b--)
{
d += factorial(b,a+c*(M+1)+b);
c++;
}
printf("%lld",(d+N+1)%1000000007);
return 0;
}
但是这个代码只能得10分,当N大的时候不行了,可以用快速阶乘解决
洛谷【P5004 专心OI - 跳房子】 题解的更多相关文章
- 洛谷P5002 专心OI - 找祖先
题目概括 题目描述 这个游戏会给出你一棵树,这棵树有\(N\)个节点,根结点是\(R\),系统会选中\(M\)个点\(P_1,P_2...P_M\). 要Imakf回答有多少组点对\((u_i,v_i ...
- 洛谷P1783 海滩防御 分析+题解代码
洛谷P1783 海滩防御 分析+题解代码 题目描述: WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和 ...
- 洛谷P4047 [JSOI2010]部落划分题解
洛谷P4047 [JSOI2010]部落划分题解 题目描述 聪聪研究发现,荒岛野人总是过着群居的生活,但是,并不是整个荒岛上的所有野人都属于同一个部落,野人们总是拉帮结派形成属于自己的部落,不同的部落 ...
- 洛谷P1155 双栈排序题解(图论模型转换+二分图染色+栈)
洛谷P1155 双栈排序题解(图论模型转换+二分图染色+栈) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1311990 原题地址:洛谷P1155 双栈排序 ...
- BZOJ2527 & 洛谷3527:[Poi2011]Meteors——题解
+++++++++++++++++++++++++++++++++++++++++++ +本文作者:luyouqi233. + +欢迎访问我的博客:http://www.cnblogs.com/luy ...
- 洛谷10月月赛II题解
[咻咻咻] (https://www.luogu.org/contestnew/show/11616) 令人窒息的洛谷月赛,即将参加NOIp的我竟然只会一道题(也可以说一道也不会),最终145的我只能 ...
- [洛谷P1823]音乐会的等待 题解(单调栈)
[洛谷P1823]音乐会的等待 Description N个人正在排队进入一个音乐会.人们等得很无聊,于是他们开始转来转去,想在队伍里寻找自己的熟人.队列中任意两个人A和B,如果他们是相邻或他们之间没 ...
- 洛谷 p1516 青蛙的约会 题解
dalao们真是太强了,吊打我无名蒟蒻 我连题解都看不懂,在此篇题解中,我尽量用语言描述,不用公式推导(dalao喜欢看公式的话绕道,这篇题解留给像我一样弱的) 进入正题 如果不会扩展欧里几德的话请先 ...
- 洛谷p2370yyy2015c01的U盘题解
没什么特殊的想法 就是看自己很久没有更新关于题解类的文章了而已 (其实这是我好久之前做的, 只是把它从洛谷博客搬到了这里而已) 题目 首先分析题目要二分 他长成这个亚子太二分了 所以就要二分 最好是先 ...
随机推荐
- java5循环结构一
public class jh_01_循环学习需要用到的知识点 { public static void main(String[] args) { int a = 1;// 把数值1赋值给int类型 ...
- 前端jQuery日历控件报错 $("#datepicker").datepicker is not a function
使用日历控件时,前端产生错误: $("#datepicker").datepicker is not a function 问题原因 前端在同一个页面,jQuery引入了两次. 解 ...
- CentOS使用465端口发送邮件
1)邮件发送示例 方法1:echo "This is a test mail" | mail -s '邮件测试' 452666750@qq.com 方法2:mail -s '服务运 ...
- The Divide and Conquer Approach - 归并排序
The divide and conquer approach - 归并排序 归并排序所应用的理论思想叫做分治法. 分治法的思想是: 将问题分解为若干个规模较小,并且类似于原问题的子问题, 然后递归( ...
- 创建一个JavaWeb工程
1.用到的工具:eclipse编译器+Tomcat9,在自己电脑上已配置好jdk和tomcat的环境变量 2.新建一个project 2.选择web文件中的Dynamic Web project,进入 ...
- 访问控制列表 ACL
访问控制列表(Access Control List,ACL) 是路由器和交换机接口的指令列表,用来控制端口进出的数据包.其目的是为了对某种访问进行控制. 作用 ACL可以限制网络流量.提高网络性能. ...
- Linux 性能分析 工具命令
背景知识:具备背景知识是分析性能问题时需要了解的.比如硬件 cache:再比如操作系统内核.应用程序的行为细节往往是和这些东西互相牵扯的,这些底层的东西会以意想不到的方式影响应用程序的性能,比如某些程 ...
- Nginx简介入门
买了极客时间上陶辉的Nginx核心知识100讲,正在学.链接 Nginx 4个组成部分 二进制可执行文件 nginx.conf 配置文件 access.log error.log nginx 版本 M ...
- ACP知识总结
由于ACP是一个敏捷开发的系统性知识,下面只针对我自身学习的知识总结,若需要完整的考试学习资料,可评论区或私聊我拿. 敏捷估计与规划.png ACP知识点锦集.png 敏捷项目软件总结.p ...
- 虚拟机VMware官网最新版附密钥,kali,ubuntu,centos,deepin迅雷下载地址。
以下全部都是官网的迅雷复制链接 版本都是当前时间可下载的最新版本 VMware官网迅雷下载链接: https://download3.vmware.com/software/wkst/file/VMw ...